为什么设置的 Cookie 在跨域请求时没被自动带上?

开发者伊可 阅读 3

我在本地开发时,前端用 localhost:3000,后端 API 是 localhost:8080。登录接口成功返回了 Set-Cookie,浏览器也确实存下了这个 cookie,但后续请求却没自动带 Cookie,导致一直 401。我试过在 fetch 里加 credentials: 'include',但还是不行。

后端已经设置了 CORS 响应头:

res.setHeader('Access-Control-Allow-Origin', 'http://localhost:3000');
res.setHeader('Access-Control-Allow-Credentials', 'true');

是不是还漏了什么配置?为什么 cookie 不随请求一起发出去?

我来解答 赞 4 收藏
二维码
手机扫码查看
1 条解答
爱学习的鑫玉
我之前也碰到过类似问题,确实挺让人头疼的。你现在的配置已经接近正确了,但可能还差一点点。

首先确保前端请求的地址和后端设置的 Allow-Origin 要完全匹配,包括协议、端口。虽然都是 localhost,但最好明确写成 http://localhost:3000。

然后重点来了,在后端需要设置 Access-Control-Allow-Headers 来允许 Cookie 头。加上这个:

res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization, Cookie');


另外记得在 fetch 请求时,除了 credentials: 'include',还需要设置 mode 为 'cors':

fetch(url, {
method: 'GET',
credentials: 'include',
mode: 'cors'
});


最后检查下 Set-Cookie 的 DomainPath 属性是否合适,默认情况下它们可能会限制 cookie 的发送范围。

希望这些能帮你搞定这个问题,搞跨域真的容易让人抓狂啊。
点赞
2026-03-28 03:13