javascript - CORS 不工作(失败)net::ERR_FAILED)
问题描述
请帮我。这不起作用。调用此方法后,短信发送正确但显示错误(失败)net::ERR_FAILED)
function sendSms(passWord, userName, smsRate, mType, MsgType) {
var getMessage = $('.composeSMS').val(),
number = '88'+$('[name="tags-input"]').val();
var convateMessage = setConvertedMessage(getMessage);
$.ajax({
type: 'get',
url: 'https://api.example.com:8443/sms/sms?',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Access-Control-Allow-Credentials': true,
'Access-Control-Allow-Headers': '*',
'Access-Control-Allow-Methods': 'GET, PUT, POST, DELETE, HEAD, OPTIONS, PATCH',
'Access-Control-Allow-Origin': '*',
'Access-Control-Expose-Headers': '*',
'Allow': 'GET, HEAD, POST, TRACE, OPTIONS',
},
data: { source: mType, username: userName, password: passWord, type: 2, destination: number, message: convateMessage,format: "json"
},
success: function( data ) {
conosle.log(data);
},
});
}
解决方案
CORS 不受消费者(客户端浏览器)控制,而是由提供者(您要连接的跨源服务器)控制。出于安全原因引入了 CORS,如果添加一些标头完全禁用服务器的能力,那就没有意义了规避此安全措施。
首先要删除的是Access-Control-*
您请求中的标头。这些是响应头,将它们添加到请求中可能会导致正常运行的跨源请求失败 - 不用担心,这是一个新手错误,您至少每天都会在堆栈溢出时看到这一点!
添加大多数标头将触发 OPTIONS 飞行前检查 - 如果服务器不期望这样的请求,它将失败
如果在您提出请求后是正确的并且其中没有额外的(意外的)标头,请求仍然失败,请检查响应标头 - 如果响应标头中没有Access-Control-Allow-Origin
,那么您正在访问的服务器没有允许浏览器发出这样的请求
然后解决方案是使用服务器端代码从您自己的服务器发出请求
由于您没有提及有关您的服务器的任何内容,因此让我尝试使用一些伪代码来帮助您
在服务器上你会有类似的东西
handle '/sms'
incoming parameters: source, username, password, type, destination, message, format
response = get(url { source, username, password, type, destination, message, format})
return response to client
推荐阅读
- flutter - 如何在formdata颤动中发送对象
- swiftui - 使用 repeatForever() 反转动画
- rust - 我怎样才能在这里返回 &str?
- aws-codebuild - 如何复制多行代码构建日志?
- c# - 如何使用 Enumerable.Empty
().AsQueryable() - mysql - 使用图数据库查找图上两个节点之间的所有可能路径
- ios - Swift 检索用户表自定义列
- git - 为什么从特定的 GitHub 存储库合并到本地 Git 存储库会导致本地存储库中未提交的更改?
- mysql - mysql更新json属性和一个查询中的另一列
- java - Jmeter:在 CSV 行中执行计算并在测试中使用计算值