首页 > 解决方案 > 浏览器未为部署在 aws cloudfront 上的 fetch api 设置 cookie

问题描述

因此,我使用 fetch 选项从https://demos.thedomain.comto发出请求: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 重新指向时,它无法设置曲奇饼干。我试过设置安全:真,假都。如果需要更多详细信息,请询问。

标签: webcookiesfetchamazon-cloudfront

解决方案


看起来您正在将请求发送到子域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


推荐阅读