Cookie不存储在浏览器中,跨域GET请求

Cookie is not stored in the brower, cross domain GET request

我有一个使用 GET 请求提供文件的域(比如 cookiebaker.com)。每当发出请求时,cookiebaker 服务器都会在文件响应中添加 set-cookie header。

这里是一个例子header(Max-Age设置为未来1个月):

set-cookie: cookie_name=cookie_value; Max-Age=2592000; secure; HttpOnly; SameSite=Lax

现在,当我从另一个域调用 cookiebaker.com 时(比如 munchies.com),我可以在 GET 响应中看到 set-cookie header,但是 munchies.com 不存储 cookie。我在开发工具中没有看到cookie,在后续请求中也没有上传。

我知道在执行 GET 请求时我必须将 "withCredentials" 标志设置为 true,但这对我的情况没有帮助。

这是我精简的 munchies.com 代码:

let request = new XMLHttpRequest();
request.open('GET', "https://cookieBaker.com?param=value");
request.withCredentials = true; // Tell the browser to receive cookies
request.send();

还有什么可以阻止 cookie 存储在浏览器中吗?这些是 GET 响应中包含的所有访问控制 header(本地主机是 munchies.com 的 "real" 名称,用于我的测试):

access-control-allow-credentials: true
access-control-allow-headers: Authorization, Content-Type
access-control-allow-methods: OPTIONS, GET, POST, PUT, PATCH, DELETE
access-control-allow-origin: http://localhost
access-control-expose-headers: X-WP-Total, X-WP-TotalPages

您已在 cookiebaker.com cookie 上明确设置 SameSite=Lax,这将限制它在跨站点上下文中发送,例如fetch() 来自 munchies.com.

对于显式跨站点 cookie,您应该使用 SameSite=None;Secure。有关更深入的实施细节,请参阅 https://web.dev/samesite-cookie-recipes