必须设为"include",因Fetch默认credentials为"same-origin"(仅同源携带Cookie),跨域时不发凭据;设"include"后才无论同源或跨域均携带Cookie及认证头,但需后端配合Access-Control-Allow-Origin精确指定和Access-Control-Allow-Credentials:true。

在 JavaScript 中使用 Fetch API 时,若需携带 Cookie 或其他认证凭据(比如 session、HTTP 认证信息)发送请求,必须显式设置 credentials 选项为 "include"。
为什么要设为 include?
默认情况下,Fetch 请求的 credentials 是 "same-origin",即只在同源请求中发送 Cookie;跨域请求则不会携带任何凭据。设为 "include" 后,无论同源还是跨域,都会带上 Cookie、HTTP 认证头等凭据 —— 这对登录态保持、服务端 Session 验证等场景至关重要。
基本写法(带 credentials: "include")
只需在 fetch 的配置对象中添加 credentials: "include" 即可:
fetch('/api/user/profile', {
method: 'GET',
credentials: 'include' // ✅ 关键设置
})
配合跨域请求的注意事项
当后端是跨域服务(如前端 localhost:3000 → 后端 api.example.com)时,仅前端设 credentials: "include" 不够,还需后端配合:
立即学习“Java免费学习笔记(深入)”;
- 响应头必须包含
Access-Control-Allow-Origin,且不能为通配符*(必须指定具体源,如http://localhost:3000) - 响应头需明确允许凭据:
Access-Control-Allow-Credentials: true - 如果用到自定义请求头(如
Authorization),还需额外声明:Access-Control-Allow-Headers
其他 credentials 可选值对比
credentials 支持三个字符串值:
- "include":始终发送凭据(Cookie、授权头等)
- "same-origin":仅同源请求发送(默认值)
- "omit":从不发送凭据(完全忽略 Cookie 和认证信息)


















