Cookie 未在 Chrome 跨域发布中发送

Posted

技术标签:

【中文标题】Cookie 未在 Chrome 跨域发布中发送【英文标题】:Cookie not sent in Chrome Cross Domain Post 【发布时间】:2012-08-29 09:48:27 【问题描述】:

我想使用 POST 提供跨域服务。我可以看到 preflight OPTIONS 调用成功,但是当我发布时,cookie 没有在 Chrome 中发送。相同的 javascript 和服务器代码适用于 Firefox 和 Safari。可能是什么问题呢?以下是详细信息:

请求网址:http://j.test.com/Post 请求方法:OPTIONS 状态码:200 OK 请求标头查看源代码 接受:/ 接受字符集:ISO-8859-1,utf-8;q=0.7,*;q=0.3 接受编码:gzip、deflate、sdch 接受语言:en-US,en;q=0.8 Access-Control-Request-Headers:origin、x-requested-with、content-type、accept 访问控制请求方法:POST 连接:保持活动 主持人:j.test.com 来源:http://www.amazon.com 参考:http://www.amazon.com/Gone-Girl-A-Novel-ebook/dp/B006LSZECO/ref=pd_rhf_gw_s_ts_2 用户代理:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.11 (Khtml, like Gecko) Chrome/20.0.1132.47 Safari/536.11

响应标头 访问控制允许凭据:true Access-Control-Allow-Headers:origin、x-requested-with、content-type、accept 访问控制允许方法:POST、OPTIONS 访问控制允许来源:http://www.amazon.com 访问控制最大年龄:1728000 连接:保持活动 内容长度:0 日期:格林威治标准时间 2012 年 9 月 4 日星期二 16:44:48 服务器:nginx

我使用 jQuery:

  jQuery.ajax(
     type: "POST",
     url: "http://j.test.com/Post",
     xhrFields: 
        withCredentials: true
     ,
     data: 
            referringUrl: document.URL
           ,
     success: function(data) 
     ,
     error: function (responseData, textStatus, errorThrown) 
     
  );

【问题讨论】:

你找到问题了吗? 【参考方案1】:

您的jQuery.ajax() 呼叫中可能还需要crossDomain: true

【讨论】:

【参考方案2】:

您必须将标志 withCredentials 设置为 true (http://techblog.constantcontact.com/software-development/using-cors-for-cross-domain-ajax-requests/)

【讨论】:

以上是关于Cookie 未在 Chrome 跨域发布中发送的主要内容,如果未能解决你的问题,请参考以下文章

浏览器未在启用 CORS 的情况下跨域跨域发送 cookie

Chrome 未在子域之间共享 cookie

即使所有 CORS 允许,Firefox 也不会保留跨域发送的 cookie

cookie 未在 chrome 或 firefox 中的 localhost 上设置

CORS withCredentials XHR 预检未在 Firefox 中发布 Cookie

Chrome 未在我的 OpenID Connect 工作流程 (ASP.NET OWIN) 中保存/返回 Nonce cookie