我知道以前已经以各种形式询问过这个问题,但是我似乎无法解决这个问题。我尝试使用jQuery和本机JS API发出Ajax请求。
我的情况如下(参见附图):
浏览器发出HTTP请求
服务器响应并设置持久性Cookie
浏览器发出HTTP Ajax请求,Cookie在那里
服务器响应预期,更新Cookie
浏览器发出HTTPS Ajax请求,Cookie不再存在(?!)
由于没有Cookie(意外行为),服务器会给出“默认”响应
在任何人开始关于跨域请求的讲座之前,我先说几件事:
我知道这是一个跨域请求(不同的协议),这就是服务器Access-Control-Allow-Origin在响应中设置标头的原因(并且我使用的是Chrome和Firefox,两者均支持CORS)
不过,我还知道,因为主机是相同的,所以HTTP cookie应该可以通过HTTPS进行管理(请参阅此处)。
(编辑)已为常规域(例如.domain.ext)正确设置了cookie,并且未设置HttpOnly和Secure标志
那么,为什么,为什么,为什么浏览器在进行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 (!!!)