浏览器跨域请求带不上 cookie(已经设置了携带 cookie),是为什么?

从站点 a 请求 b 域名的接口,带不上 cookie,前后端均已经设置了携带 cookie

  • 前端(axios 设置 withCredentials
  • 后端(设置 Access-Control-Allow-Credentials

但是从 c 站点,或者本地 localhost 发起请求却可以带上 cookie

求指导是遗漏了哪里的配置

阅读 2.5k
5 个回答

好像缺一步后端设置 Access-Control-Allow-Origin 为特定的域名

后端需要增加 Access-Control-Allow-Origin: a 响应头。* 不行。

如果你用的是nginx,可以这么做:

location / {
    ...
    # 确保转发 Cookie
    proxy_set_header Cookie $http_cookie;
}

我写个配置,给你参考一下

1.前端设置:

  • 在前端请求中设置了 withCredentials: true。例如,如果使用的是 Axios,可以这样设置:
axios.get('https://example.com/api', { withCredentials: true });

2.后端设置

  • 后端响应头
    Access-Control-Allow-Credentials: true
  • Access-Control-Allow-Origin 设置为特定的域名,而不是通配符 *。
Access-Control-Allow-Origin: https://your-frontend-domain.com

3.SameSite 属性:

SameSite 属性应设置为 None,并且需要同时设置 Secure 属性。例如:

Set-Cookie: CookieName=CookieValue; SameSite=None; Secure;

如果要做ngnix代理, 千万记得不要开启前端的{ withCredentials: true }, 删除它, 只配置服务器的ngnix即可!!! 前端配置这个withCredentials会导致永远不成功!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏