Jquery Ajax CORS + HttpOnly Cookie

Posted

技术标签:

【中文标题】Jquery Ajax CORS + HttpOnly Cookie【英文标题】: 【发布时间】:2011-09-28 06:26:05 【问题描述】:

我已经让 CORS 处理我当前的项目,尽管我似乎无法正常工作的一件事是 cookie。

现在我得到了 cookie,服务器发出并发送它,firefox 接受它,我可以在 firebug cookie 部分看到它。但是,当我对该服务进行后续调用时,它似乎没有在标头中发送 cookie...

GET /some/entity/ HTTP/1.1
Host: localhost:1837
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0
Accept: */*
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Referer: http://localhost:6879
Origin: http://localhost:6879

我需要对我的 ajax 调用做一些特别的事情吗?

var ajaxOptions = 
    url: serviceResourceUrl,
    type: "get",
    dataType: "json",
    success: successCallback,
    error: failedCallback,
    xhrFields:  withCredentials: true 
;

$.ajax(ajaxOptions);

【问题讨论】:

【参考方案1】:

尝试使用 beforeSend 属性而不是 xhrFields。在你的情况下:

var ajaxOptions = 
    url: serviceResourceUrl,
    type: "get",
    dataType: "json",
    success: successCallback,
    error: failedCallback,
    beforeSend: function(xhr)
      xhr.withCredentials = true;
    
;

$.ajax(ajaxOptions);

你可以在这里了解更多:Sending credentials with cross-domain posts?

【讨论】:

我最初是想这样做的,但它根本行不通。在 xhrFields: ... 上看到一篇文章,它为我检索 cookie 工作。将再次尝试其他方法。 刚试了一下,还是不行。 cookie 可以在 firebug 中看到,它具有正确的过期时间和域。在服务上调试时没有 cookie :( 对不起所有的 cmets,但只是仔细检查了域并在 firebug 中报告了 localhost(部分正确),但是开发中的服务实际上在 localhost:1873 上。如果我尝试编辑 cookie 并将该域放入,它只是忽略它并且似乎只保留 localhost。服务器似乎将其正确设置为...所以这可能是 Firefox 的错误吗? 鉴于您的回答,虽然 xhrFields 有效,而 beforeSend:... 对我没有用。这里的根本问题是通过不让服务器设置 cookie 域并让客户端推断它来解决的。

以上是关于Jquery Ajax CORS + HttpOnly Cookie的主要内容,如果未能解决你的问题,请参考以下文章

CORS jQuery AJAX 请求

(Jquery、Ajax、Django、Cors、GET)没有“Access-Control-Allow-Origin”标头 - 忽略 Cors 白名单

带有 Express.js 和 jQuery.ajax 的 CORS

CORS PUT:在 jQuery.ajax 中找不到

jQuery ajax 和 CORS 不起作用

jQuery ajax 和 CORS 不起作用