<p>JavaScript 中 fetch 设置自定义请求头需通过 headers 选项传入对象或 Headers 实例;Content-Type、Authorization 和 X- 开头自定义头可直接设置,跨域时须配 credentials 和服务端 Access-Control-Allow-Headers。</p>

在 JavaScript 中使用 fetch 设置自定义请求头,需要通过 headers 选项传入一个 Headers 对象或普通对象。关键在于:请求头必须在 init 配置对象中显式声明,且部分敏感头(如 Cookie、Authorization)需配合其他配置才能生效。
用对象字面量直接设置 headers
最常用方式是传入一个普通对象,键为请求头名(自动转为驼峰或标准格式),值为字符串:
-
Content-Type建议明确指定,尤其发 JSON 时 -
Authorization可用于携带 token - 自定义头如
X-Request-ID、X-Client-Version直接写入即可
示例:
fetch('/api/data', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer abc123',
'X-Request-ID': 'req_789'
},
body: JSON.stringify({ name: 'Alice' })
});
用 new Headers() 构造更灵活的请求头
适合需要动态添加、追加或复用头信息的场景。它支持链式调用,也兼容对象初始化:
立即学习“Java免费学习笔记(深入)”;
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
append()添加(允许重复键) -
set()设置(覆盖同名键) - 构造时可传入对象或已有 Headers 实例
示例:
const headers = new Headers({
'Content-Type': 'application/json'
});
headers.set('Authorization', 'Bearer abc123');
headers.append('X-Timestamp', Date.now().toString());
fetch('/api/data', { method: 'GET', headers });
注意跨域与 credentials 的配合
如果请求跨域,且需要发送带认证信息的自定义头(如 Authorization 或自定义头),必须显式设置 credentials:
-
credentials: 'include'—— 携带 Cookie 和认证头(服务端需允许) -
credentials: 'same-origin'—— 同源才发送(默认) - 不设或设为
'omit'时,自定义头可能被忽略或请求被拦截
同时服务端响应需包含:Access-Control-Allow-Headers(列出你用的自定义头),否则浏览器会预检失败。
常见问题提醒
以下情况会导致自定义头无效或报错:
- 在
GET请求中误给body并设Content-Type(GET 不应有 body) - 未处理 JSON 数据:发 JSON 必须设
Content-Type: application/json,且body是字符串 - 拼写错误:如写成
content-type(小写)也能工作,但建议统一用标准大驼峰格式 - 尝试设置禁止修改的头:如
Host、Connection、Content-Length等会被浏览器忽略

















