web - 浏览器未为部署在 aws cloudfront 上的 fetch api 设置 cookie
问题描述
因此,我使用 fetch 选项从https://demos.thedomain.com
to发出请求:https://api.thedomain.com
fetch('https://api.thedomain.com', {
"body": {"username":"me@asdf.in","password":"qwerty"}",
"credentials": "same-origin",
"method": "POST",
"headers": {
"Accept": "application/json",
"Content-Type": "application/json"
}
})
回应是:
并且浏览器不设置cookies。有谁知道为什么会这样?我将 cloudfront 的名称放在问题中的原因是,如果我将(完全相同)构建部署到 firebase 并将路由 53 指向它,它可以完美运行,但是当我将它部署到 Cloudfront 的 S3 并使用 cloudfront CNAME 重新指向时,它无法设置曲奇饼干。我试过设置安全:真,假都。如果需要更多详细信息,请询问。
解决方案
看起来您正在将请求发送到子域https://api.thedomain.com的远程服务器。这意味着您的请求是跨站点发出的,响应上的 Access-Control 标头应定义并withCredentials
设置为true
.
我看到您已经将Access-Control-Allow-Credentials
标头设置为true
,并且标头在响应标头中的https://demos.thedomain.comAccess-Control-Allow-Origin
中专门表示您的客户端子域。
更改
"credentials": "same-origin"
获取请求中的属性
"credentials": "include"
现在您应该会看到在您的浏览器上设置的 cookie。
来源:https ://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch