我有两个不同的域,并尝试在两个域之间共享数据。
我的计划是让domain-1.com向domain-2.com发出GET请求,这将使用他们在domain-2.com上的登录状态。
domain-2 具有适当的 HTTP 标头:
response.headers["Access-Control-Allow-Origin"] = request.headers["Origin"]
response.headers["Access-Control-Allow-Credentials"] = "true"
response.headers["Access-Control-Allow-Methods"] = "GET, OPTIONS"
response.headers["Access-Control-Allow-Headers"] = "Content-Type"
if request.method == "OPTIONS"
return head :ok
end
return render json: {user: user}, status: 200
domain-1 发出获取请求:
fetch('https://domain-2.com/endpoint', {
method: 'GET',
mode: 'cors',
credentials: 'include'
});
我可以看到
OPTIONS
请求显示 200 OK
,GET
请求显示 200。
但是没有发送
Cookie
标头。
这是因为这是两个不同的域吗?
为什么当我
www.domain.com
向 api.domain.com
发出包含在 api.domain.com
上设置的 cookie 的请求时,此操作会起作用?
这似乎是原因 - cookie 设置为
SameSite
属性 - https://security.stackexchange.com/a/261240
因此,为了在我的场景中发挥作用,我需要在 cookie 上使用限制较少的
SameSite
属性。