IE CORS - Access-Control-Allow-Headers 错误,即使指定了 headers
IE CORS - Access-Control-Allow-Headers error even though headers are specified
我目前在网页上向 API 端点提交 AJAX 请求,该端点在 Chrome 和 Firefox 中有效,但在 IE 中无效。
我在 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.
查看 pre-flight OPTIONS 请求,这里有一些 headers:
Origin: http://www.example.org
Access-Control-Request-Headers: content-type, accept, x-custom-header
Access-Control-Request-Method: GET
pre-flight 的响应表明:
Access-Control-Allow-Headers: content-type, x-custom-header
Access-Control-Allow-Methods: GET, POST, PUT, OPTIONS
Access-Control-Allow-Origin: *
发生这种情况后,不会执行 AJAX 请求。
看起来 IE 无法看到在 pre-flight 请求的响应中返回了 header。
任何帮助将不胜感激,如果您需要更多信息,请询问。
谢谢,
詹姆斯
好的,我找到了解决方案。事实证明,IE 强制 header 的值位于逗号分隔列表中,并且 pre-flight 请求使用相同的键以多个 header 响应。 (尽管 the W3 says that doing this should be okay)。例如,响应可以指定 Access-Control-Allow-Headers
header 两次:
Access-Control-Allow-Headers: content-type
Access-Control-Allow-Headers: accept
网络选项卡上的所有开发工具(包括 IE)显示 headers 组合在一起作为逗号分隔列表,即使它们在技术上是不同的 headers 具有相同的名称.这就是混乱的来源。
这是在使用 Postman 模拟 pre-flight 请求并看到 header 作为单独的项目返回时发现的。
因此,要解决此问题,请确保 CORS headers(例如“access-control-allow-headers”包含逗号分隔列表而不是 headers,因为 IE 将只接受第一个发送的。例如,响应应该是:
Access-Control-Allow-Headers: content-type, accept
我们 运行 遇到 Internet Explorer 和 Access-Control-Allow-Methods 的 CORS 问题,它们与 OPTIONS 响应中的允许“*”不兼容。解决方法是更改 API 网关中的选项响应以使用所有方法
我目前在网页上向 API 端点提交 AJAX 请求,该端点在 Chrome 和 Firefox 中有效,但在 IE 中无效。
我在 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.
查看 pre-flight OPTIONS 请求,这里有一些 headers:
Origin: http://www.example.org
Access-Control-Request-Headers: content-type, accept, x-custom-header
Access-Control-Request-Method: GET
pre-flight 的响应表明:
Access-Control-Allow-Headers: content-type, x-custom-header
Access-Control-Allow-Methods: GET, POST, PUT, OPTIONS
Access-Control-Allow-Origin: *
发生这种情况后,不会执行 AJAX 请求。
看起来 IE 无法看到在 pre-flight 请求的响应中返回了 header。
任何帮助将不胜感激,如果您需要更多信息,请询问。
谢谢, 詹姆斯
好的,我找到了解决方案。事实证明,IE 强制 header 的值位于逗号分隔列表中,并且 pre-flight 请求使用相同的键以多个 header 响应。 (尽管 the W3 says that doing this should be okay)。例如,响应可以指定 Access-Control-Allow-Headers
header 两次:
Access-Control-Allow-Headers: content-type
Access-Control-Allow-Headers: accept
网络选项卡上的所有开发工具(包括 IE)显示 headers 组合在一起作为逗号分隔列表,即使它们在技术上是不同的 headers 具有相同的名称.这就是混乱的来源。
这是在使用 Postman 模拟 pre-flight 请求并看到 header 作为单独的项目返回时发现的。
因此,要解决此问题,请确保 CORS headers(例如“access-control-allow-headers”包含逗号分隔列表而不是 headers,因为 IE 将只接受第一个发送的。例如,响应应该是:
Access-Control-Allow-Headers: content-type, accept
我们 运行 遇到 Internet Explorer 和 Access-Control-Allow-Methods 的 CORS 问题,它们与 OPTIONS 响应中的允许“*”不兼容。解决方法是更改 API 网关中的选项响应以使用所有方法