IE9中的jQuery AJAX请求不发送Cookie头

时间:2011-05-26 09:04:20

标签: ajax cookies jquery xmlhttprequest internet-explorer-9

我正在使用jQuery的ajax .get方法从我的服务器检索数据。在Chrome中工作得很完美,但在IE9中,它不会发送Cookie标头并且会破坏应用程序。知道为什么吗?这是jQuery代码:

$.get(this.server + 'rest/photo/' + this.profileId + '/count', function(data) {
    $('#imageCount').html(data);
});

2 个答案:

答案 0 :(得分:1)

我在这里遇到同样的问题,我无法使用jQuery .ajax()函数。我找到的唯一解决方法是:

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" /> 

您可以将此元标记添加到页面顶部以使其正常工作。但它不是一个好的解决方案。我认为问题是IE9中的xmlhttprequest对象是不同的,因此jQuery无法找到相应的对象,因此ajax不会触发。

答案 1 :(得分:0)

多年以后,我在IE9上遇到类似的问题与IE9相关,遗憾的是,IE9仍然存在。

我尝试过的每一个浏览器,包括IE10 +,都可以将cookie传递给我的后端,但IE9只会放弃它们。它似乎与cookie上的属性无关。主页面和API在相同的域上,并且cookie匹配,方案是相同的。我没有用IFRAMES做任何事情,所以P3P 'potato' hack没有帮助。

所以我开始研究IE9的内容可能有所不同。 This Microsoft post非常具有启发性,并概述了IE8和IE9帮助锁定CORS安全漏洞所做的所有事情:

  • 必须使用HTTP(S),并且两个端点必须使用相同的方案
  • 必须使用GET / POST
  • 不允许自定义标题
  • 仅允许文本/纯文本内容类型
  • 对安全区设置更敏感
  • Cookie将从请求中删除

关于cookie的最后一项让我思考,如果IE9认为我正在提出跨站请求怎么办?它当然看起来像是以这样精美的方式被击落。我已经检查了一些显而易见的事情,比如方案和域名,但也许我没有检查过所有内容。

解决方案?具体来说,我使用reqwest作为我的ajax库。它有一个跨源参数,由于某种原因,我将其设置为true。将它(正确)设置为false就可以了 - 我的所有cookie都是由服务器选取的。所以这是一个愚蠢的错误,但我学到了一两件事。

希望这有助于某人!