【发布时间】:2012-09-20 13:43:24
【问题描述】:
我目前在使用 IE10 进行跨域 ajax 调用时遇到问题(在 IE10 模式下,不兼容)。
情况:
我有两个域,http://a 和 http://b。我为http://b 设置了一个cookie。我目前在页面http://a。
我想使用 XMLHttpRequest 向 http://b 发出 CORS 请求(根据 http://blogs.msdn.com/b/ie/archive/2012/02/09/cors-for-xhr-in-ie10.aspx 应该可以工作),并在请求中包含 cookie。
JS如下:
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://b', true);
xhr.withCredentials = true;
xhr.send();
这应该确保cookie附加到请求中;但是,Fiddler 跟踪显示没有附加 cookie,我得到401: Access Denied。
服务器配置为使用 CORS,它包括 Access-Control 标头:
Access-Control-Allow-Origin: http://a
Access-Control-Allow-Credentials: true
(这应该没有什么区别,因为没有OPTIONS预检请求,并且IE发送的第一个请求是GET,并且cookie不存在,因此导致401)。
此外,JS sn-p 在 Firefox 和 Opera 中都可以正常工作。
【问题讨论】:
-
注意:我在使用 jQuery 时看到了相同的行为,
xhrFields: { withCredentials: true } -
我没有 IE10,但我有一个 CORS 测试站点。你能在IE10中尝试以下请求,看看它是否有效?只需单击“发送请求”按钮,然后查看响应是什么。我刚刚尝试过,它可以在 Chrome 中运行。如果它在 IE 中不起作用,则可能是一个错误:client.cors-api.appspot.com/…
-
这可能是一个错误。您的 cookie 上的域是什么?请注意,b.com 设置的 cookie 只能由 b.com 访问。 a.com 上的 JS 代码看不到它。
-
是的,cookie 设置在域
http://b.com上。当withCredentials设置为 true 时,Firefox 和 Opera 都包含 cookie,我还没有在 Chrome 和 Safari 上尝试过。
标签: javascript ajax internet-explorer cors