小编典典

通过HTTPS的HTTP Cookies和Ajax请求

ajax

我知道以前已经以各种形式询问过这个问题,但是我似乎无法解决这个问题。我尝试使用jQuery和本机JS API发出Ajax请求。

我的情况如下(参见附图):

  1. 浏览器发出HTTP请求
  2. 服务器响应并设置持久性Cookie
  3. 浏览器发出HTTP Ajax请求,Cookie在那里
  4. 服务器响应预期,更新Cookie
  5. 浏览器发出HTTPS Ajax请求,Cookie不再存在(?!)
  6. 由于没有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 (!!!)

阅读 283

收藏
2020-07-26

共1个答案

小编典典

好的,找到解决cookie问题的方法。

请参阅XHR规范jQuery文档StackOverflow

切换协议和/或子域时发送cookie的解决方案是将withCredentials属性设置为true

例如(使用jQuery)

 $.ajax( {
   /* Setup the call */
   xhrFields: {
     withCredentials: true
   }
 });
2020-07-26