cookie域上的点前缀阻止了CORS请求

时间:2017-12-14 19:48:04

标签: javascript ajax reactjs cookies cors

当我在身份验证后从我的服务器发送响应时,我使用此标头在客户端的浏览器中设置了身份验证令牌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时手动编辑域名?

1 个答案:

答案 0 :(得分:1)

如果您要发送凭据,则无法使用Access-Control-Allow-Origin:*进行回复 - 您必须使用完全镜像原始请求标头的值进行响应,例如Access-Control-Allow-Origin: {value-of-Origin-Header}

在你的情况下,这可能是Access-Control-Allow-Origin: https://subdomain.mydomain.com。最好不要硬编码 - 只需反映原始值。