【问题标题】:Cross domain ajax request with jQuery not sending cookies使用 jQuery 的跨域 ajax 请求不发送 cookie
【发布时间】:2020-06-30 22:05:39
【问题描述】:

互联网上充斥着这种类型的请求,但我再次询问,因为所有答案似乎都是在 2014 年左右。我有类似的问题,但现在没有一个旧修复程序有效,所以我不确定如果 2020 年(及以后)需要新的东西。

我正在尝试从domainA.com 拨打电话至domainB.com。用户在 domainB.com 上进行身份验证,该身份存储在该域的 cookie 中。

我对这两个域都有管理访问权限,因此我可以根据需要在任一端进行更改。

这是我在 domainA.com 网站上使用的 jQuery ajax 调用:

$.ajax({
    url: "https://domainB.com/endpoint",
    xhrFields: {
        withCredentials: true
    }}
)

我还尝试了其他属性,例如:

  • crossDomain: true
  • dataType: "json"

domainB.com 站点收到请求,但请求中没有 cookie

请求头如下:

host -> domainB-host
connection -> close
accept -> */*
sec-fetch-dest -> empty
user-agent -> Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36
dnt -> 1
origin -> https://domainA.com
sec-fetch-site -> cross-site
sec-fetch-mode -> cors
referer -> https://domainA.com/
accept-encoding -> gzip, deflate, br
accept-language -> en-US,en;q=0.9

domainB.com 上,我还设置了以下响应标头

Access-Control-Allow-Origin: https://domainA.com
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: Origin

当CORS(我认为)正确设置时,为什么domainB.com cookie 没有在domainA.com 发出的请求中传递?

更新 1 这适用于 Firefox,但不适用于 Chrome(在 Mac 上)。我之前也曾在 Firefox 中进行过测试,但它无法正常工作。通过上述配置,它实际上在 Firefox 中可以工作。

【问题讨论】:

    标签: google-chrome cookies cross-domain samesite


    【解决方案1】:

    原来这与 Chrome 在 80 版中的变化有关:

    Troy Hunt here 写了一篇非常好的文章。

    简而言之,现在唯一要传递的 cookie 是那些设置了 SameSite=NoneSecure 的 cookie。所以cookie需要这样设置:

    Set-Cookie: cookie-name=cookie-value; SameSite=None; secure

    这些现在是 Chrome 为跨站点请求传递的唯一 cookie。

    【讨论】:

      猜你喜欢
      • 2013-01-05
      • 2016-10-02
      • 1970-01-01
      • 2019-02-11
      • 1970-01-01
      • 2014-11-24
      • 2016-07-25
      • 1970-01-01
      • 2012-12-04
      相关资源
      最近更新 更多