必须同时配置前后端:前端 fetch 设置 credentials: 'include',后端响应头需含 access-control-allow-credentials: true 且 access-control-allow-origin 为具体域名(非 *),cookie 还须设 samesite=none 和 secure。

要在跨域请求中携带 Cookie,必须同时满足前端和后端的配置要求,缺一不可。核心是设置 credentials 选项为 'include',并确保服务端明确允许凭据且指定具体源(不能用通配符 *)。
前端:Fetch 必须显式设置 credentials
默认情况下,Fetch 不发送 Cookie,即使跨域目标支持。需主动声明:
- 使用
credentials: 'include'—— 表示始终携带 Cookie(即使同域也发,且跨域时要求服务端配合) - 不能用
'same-origin'(默认值),它在跨域时不发 Cookie - 不能用
'omit'(完全不发)
示例:
fetch('https://api.example.com/data', {
method: 'GET',
credentials: 'include' // 关键:必须写这一行
});
后端:CORS 响应头必须精确配置
浏览器收到响应后会检查以下两个响应头,任一缺失或错误都会拒绝返回数据(即使 HTTP 状态是 200):
-
Access-Control-Allow-Origin:必须是具体域名(如https://your-app.com),不能是* -
Access-Control-Allow-Credentials:必须为true
常见错误:后端设了 Allow-Credentials: true 却仍用 Allow-Origin: *,此时浏览器直接报错“Credentials flag is true, but the 'Access-Control-Allow-Origin' header value is '*'”。
Cookie 本身也要符合跨域发送条件
即使 Fetch 和 CORS 都正确,Cookie 还需满足自身属性才能被带上:
- 服务端 Set-Cookie 时需包含
SameSite=None(否则现代浏览器默认阻止跨站发送) - 必须同时设置
Secure(即只在 HTTPS 下发送)——SameSite=None+Secure是强制搭配 - Cookie 的
Domain属性需覆盖当前请求的目标域名(例如 API 域名为api.example.com,则 Cookie Domain 可设为.example.com)
调试建议
遇到不携带 Cookie 时,按顺序检查:
- 浏览器开发者工具 Network 标签页 → 点开请求 → 查看 Request Headers 是否有
Cookie字段(没有说明前端未发出) - 查看 Response Headers 是否含
Access-Control-Allow-Credentials: true和具体的Access-Control-Allow-Origin - 检查 Application → Cookies,确认对应域名下是否存在有效且未过期的 Cookie,且
SameSite和Secure属性正确
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











