edd*_*P23 5 cookies http cross-domain cors
我在一个网站上https://aaa.shared.com。该网站(称之为)向 url (网站)A发送请求并接收具有以下标头的响应:xhrhttps://zzz.shared.com/some/pathZ
access-control-allow-credentials: true
access-control-allow-origin: aaa.shared.com
set-cookie: foo=bar; expires=Fri, 01 Jan 2100 00:00:00 GMT; path=/; secure; samesite=none; httponly
Run Code Online (Sandbox Code Playgroud)
(我按照这个问题的答案添加access-control标题)
现在,我期望的是,每当我同时在 A 或 Z 上时,每当请求发送到Z(跨源或同源,重要的是请求的 URL)时,浏览器都会添加 cookie,但事实并非如此。 t!此外,我看不到它在浏览器开发人员工具(F12 -> 应用程序 -> Cookies)中设置。我正在使用 Chrome,但目标是跨浏览器解决方案。
我缺少什么?我发现很难找到一些关于Set-Cookie请求不同来源时标头如何工作的详细信息。
编辑:rowan_z最初建议替换samesite=lax为samesite=none,因为这个问题的第一个版本中的 A 和 Z 是完全独立的域(仅共享.com部分)。我尝试了一下,但没有帮助。但现在我意识到它们实际上被视为SameSite,因为它们位于shared.com域的不同子域上。所以现在我相信这samesite=lax在这里也应该起作用。
更新:最后,我只是将应用程序移动aaa.shared.com到具有某个路径的同一子域下zzz.shared.com/aaa/path,因为处理 cookie 和 CORS 确实很困难。此外,将其配置为使用localhost会增加额外的复杂性。
您所做的所有事情确实需要使其发挥作用:
access-control-allow-credentials: trueaccess-control-allow-origin: aaa.shared.com(不是通配符)SecureSameSite=None发送请求时您只是缺少一件事:credentials: 'include'。
我创建了一个模拟端点,您可以使用它来测试这行代码两次(在另一个域的控制台中):
fetch('https://stackoverflow.free.beeceptor.com', { credentials: 'include' });
Run Code Online (Sandbox Code Playgroud)
您会注意到 cookie 将第二次发送。
如果模拟端点过期(不知道它能持续多久),或者有人破坏了它,您可以在http://beeceptor.com上使用标头配置中的 JSON 重新创建它:
{
"Content-Type": "application/json",
"Set-Cookie": "test=value; Path=/; Secure; SameSite=None;",
"access-control-allow-origin": "https://yourdomain",
"Access-Control-Allow-Credentials": "true"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4064 次 |
| 最近记录: |