【发布时间】:2020-03-22 19:28:22
【问题描述】:
我正在尝试通过 ajax POST 在 IE11 上使用 Bitly V4 URL Shorten API,但在预检 (OPTIONS) 调用后出现安全错误。我的实现和遇到的错误如下:
我的代码:
$.ajax({
type: 'POST',
url: 'https://api-ssl.bitly.com/v4/shorten',
data: JSON.stringify({group_guid: '<Bitly_group_guid>', long_url: 'https://www.google.com'}),
dataType: 'json',
contentType: 'application/json',
headers: {
'Authorization': 'Bearer <Bitly_generic_access_token>',
},
}).done(function (resp) {
console.log('OK');
}).fail(function (jqXHR, textStatus, errorThrown) {
console.log('NOT OK');
});
IE11 控制台错误(预检后抛出):
SEC7123:请求标头内容类型不存在于 Access-Control-Allow-Headers 列表中。
SCRIPT7002:XMLHttpRequest:网络错误 0x80070005,访问被拒绝。
预检 (OPTIONS) 响应标头 - 响应代码 200:
访问控制允许标头:*
访问控制允许方法:HEAD、GET、POST、PUT、PATCH、DELETE
访问控制允许来源:*
允许:发布,选项
alt-svc: 清除
内容长度:0
content-security-policy: default-src 'none
日期:2019 年 11 月 28 日星期四 03:13:04 GMT
服务器:nginx
严格传输安全性:max-age=31536000;包含子域
通过:1.1 谷歌
x-content-type-options: nosniff
x-frame-options: 拒绝
x-xss-保护:1;模式=块过滤器
最后,POST 方法根本不执行,相同的代码在 Chrome 和 Mozilla 上运行,POST 方法被执行并设法缩短 URL。
- 我阅读了Bitly CORS,但据我了解,它似乎不支持 V4。
- 我无法选择更改本地计算机上的 Internet 设置,因为每个最终用户都需要这样做。
感谢是否有人可以分享解决此问题的见解。
【问题讨论】:
-
我尝试查看文档,没有提到任何针对 IE 浏览器的具体步骤。我测试了上面的代码,但在所有浏览器中都出现 403 错误。我搜索了那个错误,这个线程可以帮助修复这个错误。 stackoverflow.com/questions/27168061/… 出于测试目的,请尝试使用较低的安全设置进行测试。我也会尝试与其他工程师讨论这个问题,以听取他们对这个问题的建议。感谢您的理解,
-
请勿发布代码、数据、错误消息等的图片 - 将文本复制或输入到问题中。 How To Ask
-
@Deepak-MSFT 感谢您的反馈。我已经用更正的语法和有效的样本值编辑了代码 sn-p,现在结合有效的 Bitly 参数进行测试应该没问题。出于测试目的,我在 Internet 选项中启用了“跨域访问数据源”,它工作正常。我还检查了您共享的链接,不幸的是,要进行的更改是在主机端本身,这与我在客户端实现调用 Bitly 的 API 的用例不同。
-
您的意思是在启用“跨域访问数据源”选项后它开始使用 IE 浏览器?我再次测试了您更新的代码,但它在我这边显示了相同的 403 错误。
-
@Deepak-MSFT,是的,它在启用“跨域访问数据源”后开始工作。该代码应该可以工作,您是否尝试过相应地替换 Bitly 参数?
标签: jquery ajax internet-explorer-11 request-headers preflight