21

我目前在使用 IE10 进行跨域 ajax 调用时遇到问题(在 IE10 模式下,不兼容)。

情况:我有两个域,http://a并且http://b. 我有一个 cookie 集http://b。我目前在页面上http://a

我想做一个http://b使用 XMLHttpRequest 的 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 片段在 Firefox 和 Opera 中都可以正常工作。

4

3 回答 3

25

这可能是相同的旧 IE P3P 问题。使用 IE 的默认设置,如果设置的 cookie 没有 P3P 标头也出现在响应中,则 cookie 被标记为“仅限第一方”。这意味着在第三方上下文中,例如 iframe 或 CORS 请求,IE 将拒绝发送 cookie。

要修复它,您需要在设置 cookie 时提供 P3P 标头。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms537343%28v=vs.85%29.aspx

更新:链接现已失效,但您可以在Internet 档案中看到它

于 2013-04-26T14:02:29.093 回答
-1

我们添加了一个标头 Vary : cookie 并且它起作用了..

于 2014-02-04T14:05:46.193 回答
-1

我遇到了类似的问题,结果是浏览器设置阻止了第三方 Cookie(IE10 > Internet 选项 > 隐私 > 高级 > 第三方 Cookie > 接受)。为了解决这个问题,我检查了“覆盖自动 cookie 处理”、​​“接受”(第三方 Cookie)和“始终允许会话 cookie”。

于 2013-05-19T13:13:56.013 回答