当我在身份验证后从我的服务器发送响应时,我使用此标头在客户端的浏览器中设置了身份验证令牌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删除前缀dot,I.E。我将.subdomain.mydomain.com
更改为subdomain.mydomain.com
,突然我的AJAX调用来自localhost工作。 Cookie随请求一起发送。
所以我的问题是,首先,为什么在有前缀点时没有发送cookie,有没有办法解决这个问题而不必在每次刷新cookie时手动编辑域名?
答案 0 :(得分:1)
如果您要发送凭据,则无法使用Access-Control-Allow-Origin:*
进行回复 - 您必须使用完全镜像原始请求标头的值进行响应,例如Access-Control-Allow-Origin: {value-of-Origin-Header}
。
在你的情况下,这可能是Access-Control-Allow-Origin: https://subdomain.mydomain.com
。最好不要硬编码 - 只需反映原始值。