我知道以前曾以各种形式提出这个问题,但我似乎无法解决这个问题。 我已经尝试使用jQuery和本机JS API来发出Ajax请求。
我的情况如下(见附图):
在任何人开始讨论跨域请求之前,请先说明一些事情:
Access-Control-Allow-Origin
标头的原因(我使用的是Chrome和Firefox,两者都支持{{3 }})那么,为什么,为什么,为什么浏览器在进行HTTPS Ajax调用时不会传递cookie?有任何想法吗?我快要忘记了......
+-----------+ HTTP Request +-----------+
|Browser |+---------------->|Server |
+-----------+ +-----------+
HTTP Response
<----------------+
Set-cookie
Ajax HTTP Req.
+---------------->
Cookie (OK)
HTTP Response
<----------------+
Set-cookie (OK)
Ajax HTTPS Req.
+---------------->
No Cookie (!!!)
答案 0 :(得分:70)
好的,找到了cookie问题的解决方案。
请参阅XHR specs,jQuery docs和StackOverflow。
切换协议和/或子域时发送cookie的解决方案是将withCredentials
属性设置为true
。
E.g。 (使用jQuery)
$.ajax( {
/* Setup the call */
xhrFields: {
withCredentials: true
}
});
答案 1 :(得分:-1)
Document.cookie和Ajax Request不共享cookie。否则,ajax无法从document.cookie或响应标头访问cookie。它们只能由远程域控制。
如果您首先通过ajax从服务器获得包含cookie的响应,那么您可以通过cookie向服务器请求ajax通信。
对于这种情况,你写下面的代码(jQuery)
$.jajx({
xhrFields : {
withCredentials : true
}
});
请参阅this article和demo