必须设为"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" 不够,还需后端配合:
- 响应头必须包含
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 和认证信息)
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











