Jam*_* B. 3 javascript internet-explorer access-control cross-domain cors
我目前正在将网页上的AJAX请求提交给在Chrome和Firefox中可使用但在IE中无法使用的API端点。
我在IE开发工具中收到的错误消息是:
SEC7123: Request header x-custom-header was not present in the Access-Control-Allow-Headers list.
SCRIPT7002: XMLHttpRequest: Network Error 0x80070005, Access is denied.
Run Code Online (Sandbox Code Playgroud)
查看飞行前OPTIONS请求,以下是一些标头:
Origin: http://www.example.org
Access-Control-Request-Headers: content-type, accept, x-custom-header
Access-Control-Request-Method: GET
Run Code Online (Sandbox Code Playgroud)
飞行前的响应显示:
Access-Control-Allow-Headers: content-type, x-custom-header
Access-Control-Allow-Methods: GET, POST, PUT, OPTIONS
Access-Control-Allow-Origin: *
Run Code Online (Sandbox Code Playgroud)
发生这种情况后,将不会执行AJAX请求。看来IE无法看到标头是在飞行前请求的响应中返回的。
任何帮助将不胜感激,如果您需要更多信息,请询问。
谢谢,詹姆斯
小智 6
我们遇到了 Internet Explorer 和 Access-Control-Allow-Methods 的 CORS 问题,它们与 OPTIONS 响应中的允许“*”不兼容。修复是在我们的 API 网关中更改选项响应以使用所有方法
好的,我找到了解决方案。事实证明,IE强制将标头的值包含在逗号分隔的列表中,并且飞行前请求正在使用相同的键响应多个标头。(即使W3表示这样做也可以https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2)
尽管在技术上不同的标头具有相同的名称,但网络选项卡上的所有开发工具(包括IE)都将标头组合在一起,并以逗号分隔的列表形式出现。这就是混乱的来源。
这是在使用Postman模拟飞行前请求并看到标头作为单独的项目返回时发现的。
因此,要解决此问题,请确保CORS标头(例如“ access-control-allow-headers”)包含逗号分隔的列表,而不是必需的标头,因为IE仅接受发送的第一个标头。
抱歉,如果措辞不佳,请随意改善答案。
| 归档时间: |
|
| 查看次数: |
1398 次 |
| 最近记录: |