Internet上充斥着这种请求,但我又问了一次,因为所有答案似乎都在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中运行。
答案 0 :(得分:0)
事实证明,这与Chrome在版本80中的更改有关:
Troy Hunt here有一个非常好的文章。
简而言之,现在唯一要传递的cookie是设置了SameSite=None
和Secure
的cookie。因此,需要将cookie设置如下:
Set-Cookie: cookie-name=cookie-value; SameSite=None; secure
现在,这些是Chrome唯一用于跨站点请求的Cookie。