cookie 域上的点前缀阻止 CORS 请求
Posted
技术标签:
【中文标题】cookie 域上的点前缀阻止 CORS 请求【英文标题】:Dot prefix on cookie domain preventing CORS request 【发布时间】:2018-05-28 23:52:29 【问题描述】:当我在身份验证后从服务器发送响应时,我正在使用此标头在客户端浏览器中设置身份验证令牌 cookie:
Set-Cookie:mysite_auth=encodedJwtHere.JustPretend; SameSite=lax; domain=subdomain.mydomain.com; HTTPOnly; Max-Age=600; Secure; path=/
但是,当我在 Chrome 中打开 EditThisCookie 时,我可以看到域被自动设置为 .subdomain.mydomain.com
。
根据我的理解,这应该不是问题。当我在浏览器中请求 https://subdomain.mydomain.com
时,正在发送 cookie。
当我尝试发出 CORS 请求时,我的问题发生了。我正在开发一个 javascript 应用程序并在 localhost
上提供它。当我对https://subdomain.mydomain.com
进行 AJAX 调用时,cookie 没有发送。
我在响应中设置了所有正确的标头:
Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:Content-Type, *
Access-Control-Allow-Origin:*
我的请求中有 withCredentials:true
配置。
如果我在浏览器中打开 https://subdomain.mydomain.com
,然后使用 EditThisCookie,我会删除前缀点,即 I.E。我将.subdomain.mydomain.com
更改为subdomain.mydomain.com
,突然我的来自本地主机的AJAX 调用工作了。 cookie 随请求一起发送。
所以我的问题是,首先,为什么在有前缀点的情况下不发送 cookie,有没有办法解决这个问题,而无需每次刷新我的 cookie 时手动编辑域?
【问题讨论】:
其实点似乎与它无关。如果我打开 EditThisCookie 并简单地单击保存按钮,那么 cookie 会在所有后续请求中发送。在我手动更新 cookie 之前,有一些东西阻止 cookie 在 CORS 请求中发送。 【参考方案1】:如果您要发送凭据,则无法回复 Access-Control-Allow-Origin:*
- 您必须回复与 Origin 请求标头完全一致的值,例如Access-Control-Allow-Origin: value-of-Origin-Header
.
在您的情况下,大概是Access-Control-Allow-Origin: https://subdomain.mydomain.com
。不过最好不要对其进行硬编码 - 只需镜像 Origin 值即可。
【讨论】:
以上是关于cookie 域上的点前缀阻止 CORS 请求的主要内容,如果未能解决你的问题,请参考以下文章