IE 上子域之间的 CORS 问题



我有3个子域clients.mywebsite.comadmins.mywebsite.comapi.mywebsite.com

api.mywebsite.com是其他两个网站使用的 RESTFUL 服务。从网站调用 API 时,我遇到了一些跨源问题。通过在 API 上设置'Access-Control-Allow-Origin', '*',我能够在大多数浏览器上解决此问题。但在Internet Explorer中,这个问题保持不变。

我能够通过在IE中启用CORS(默认情况下关闭(来手动解决此问题

Alt -> 工具 ->

互联网选项 -> 安全(选项卡( ->自定义级别 -> 其他 -> 跨域访问数据源 ->设置为启用

然后从IE调试器的控制台我尝试了一个GET请求

var xhttp= new XMLHttpRequest();
xhttp.open("GET", "https://api.mywebsite.com/v1/", true);
xhttp.send();

之后,所有GETPOST请求开始正常工作,我能够登录。我无法让客户端以这种方式配置 IE。有哪些替代解决方案?

在 IE 9 及更早版本中,您可以使用用于配置 IE 的方式来处理 CORS 问题。在 IE 10+ 中,服务器必须将以下标头附加到所有响应:

Access-Control-Allow-Origin: http://example.com
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: ACL, CANCELUPLOAD, CHECKIN, CHECKOUT, COPY, DELETE, GET, HEAD, LOCK, MKCALENDAR, MKCOL, MOVE, OPTIONS, POST, PROPFIND, PROPPATCH, PUT, REPORT, SEARCH, UNCHECKOUT, UNLOCK, UPDATE, VERSION-CONTROL
Access-Control-Allow-Headers: Overwrite, Destination, Content-Type, Depth, User-Agent, Translate, Range, Content-Range, Timeout, X-File-Size, X-Requested-With, If-Modified-Since, X-File-Name, Cache-Control, Location, Lock-Token, If
Access-Control-Expose-Headers: DAV, content-length, Allow

(可选(您还可以附加 Access-Control-Max-Age 标头,指定将缓存预检请求的秒数,这将减少请求量:

Access-Control-Max-Age: 3600

您可以参考此链接,了解如何为特定服务器实现 CORS。

如果您不想使用您使用的方式,您可以参考本文来绕过 CORS:

我们可以绕过它的方法是,而不是将 API 从您的浏览器调用到另一个域,调用您自己的域 API(例如/api(,并在 nginx(或任何其他 Web 服务器(级别将其代理到目标服务器。

最新更新