凭据:“包括”不包括 Cookie 标头

ant*_*rea 6 javascript cookies fetch fetch-api

我在客户端上使用credentials: 'include'mode: 'cors'。在服务器上我看到access-control-allow-credentials: trueaccess-control-allow-origin: https://dev.com:9443标题。我没有看到我的cookie标题,我似乎无法找到它不发送的原因。如果我能提供更多详细信息,请告诉我。

获取请求

fetch(url, {
  method: 'get',
  credentials: 'include',
  mode: 'cors',
  headers: {
    'Content-Type': 'application/json'
  }
});

Run Code Online (Sandbox Code Playgroud)

选项请求头

:authority: prod.fakedomain.com
:method: OPTIONS
:path: /Search
:scheme: https
accept: */*
accept-encoding: gzip, deflate, br
accept-language: en-US,en;q=0.9,fr;q=0.8,la;q=0.7
access-control-request-headers: content-type
access-control-request-method: GET
cache-control: no-cache
dnt: 1
origin: https://dev.com:9443
pragma: no-cache
referer: https://dev.com:9443/
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
Run Code Online (Sandbox Code Playgroud)

选项响应头

access-control-allow-credentials: true
access-control-allow-headers: content-type
access-control-allow-methods: GET,HEAD,POST
access-control-allow-origin: https://dev.com:9443
access-control-max-age: 1800
allow: GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH
content-length: 0
date: Mon, 04 Feb 2019 03:45:06 GMT
status: 200
vary: Origin
x-application-context: application:8080
Run Code Online (Sandbox Code Playgroud)

获取请求头

:authority: prod.fakedomain.com
:method: GET
:path: /Search
:scheme: https
accept: */*
accept-encoding: gzip, deflate, br
accept-language: en-US,en;q=0.9,fr;q=0.8,la;q=0.7
cache-control: no-cache
content-type: application/json
dnt: 1
origin: https://dev.com:9443
pragma: no-cache
referer: https://dev.com:9443/
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
Run Code Online (Sandbox Code Playgroud)

获取响应头

access-control-allow-credentials: true
access-control-allow-origin: https://dev.com:9443
content-encoding: gzip
content-type: application/json;charset=UTF-8
date: Mon, 04 Feb 2019 03:45:07 GMT
status: 200
vary: Origin,Accept-Encoding
x-application-context: application:8080
Run Code Online (Sandbox Code Playgroud)

小智 10

我终于发现这个问题只是浏览器不允许两个不同的域共享任何cookie(除了相同的二级域),这是无法credentials: include做到的,经过2小时的尝试......我发现credentials: include 只是意味着你可以发送cookie,但它并不意味着您可以使用两个不同的域发送 cookie..

\n

无论你做什么,更改浏览器设置\xe3\x80\x81set cookieSameSite任何方式,只是不能这样做......

\n

这就是我的结论\xef\xbc\x8chope 你明白了...

\n

  • 你有你在这里声称的内容的来源吗? (2认同)

Ser*_*oza 6

我可以通过进入 Safari 隐私设置并取消选中来解决此问题Prevent cross-site tracking

在此输入图像描述

  • 哇,这成功了!如何从 Chrome 中执行相同操作? (4认同)

Kam*_*ski 2

正如sideshowbarker在他的评论中提到的,浏览器没有为域设置 cookie prod.fakedomain.com,而且看起来服务器也没有设置 cookie。因此,如果您设置了cookiedev.com并且它们不是httpOnly,那么您可以尝试将它们复制到prod.fakedomain.com(通过JS读写)。

如果您想在 cookie 中存储敏感数据(例如 JWT 令牌),请阅读 XSS/XST 攻击并考虑使用 HttpOnly 标志的可能性。