Headers对象不可直接点语法访问或JSON.stringify,须用entries()、forEach()等方法遍历;entries()返回[key,value]数组,forEach参数顺序为(value,key),键名大小写不敏感但返回原始形式。

在 JS 中,fetch 返回的响应对象(Response)有一个 headers 属性,它是一个 Headers 对象。这个对象本身**不直接暴露所有键值对为普通对象**,也不能用 for...in 或 Object.keys() 遍历,但提供了标准方法来读取全部头信息。
用 headers.entries() 遍历所有响应头
Headers.entries() 返回一个迭代器,每次产出一个 [key, value] 数组,适合用 for...of 循环或转成数组处理:
fetch('/api/data')
.then(res => {
const headers = res.headers;
// 转成数组,便于操作
const allHeaders = Array.from(headers.entries());
console.log(allHeaders);
// 示例输出: [['content-type', 'application/json'], ['x-request-id', 'abc123'], ...]
// 或逐个遍历
for (const [key, value] of headers.entries()) {
console.log(`${key}: ${value}`);
}
});
用 headers.forEach() 简洁遍历
Headers 对象也实现了 forEach 方法,参数顺序是 (value, key, headers),和 Map 一致:
res.headers.forEach((value, key) => {
console.log(`${key} → ${value}`);
});
注意大小写不敏感,但获取时需用原始键名
Headers 对象对键名**大小写不敏感**(例如 headers.get('Content-Type') 和 headers.get('content-type') 效果一样),但 entries() 和 forEach() 返回的 key 是服务端实际发送的原始大小写形式(常见为小写或 kebab-case)。不要依赖特定大小写做判断,如需标准化,可自行转为小写处理:
const normalized = Object.fromEntries( Array.from(res.headers.entries()).map(([k, v]) => [k.toLowerCase(), v]) ); console.log(normalized['content-type']); // 安全获取
不能用 JSON.stringify(headers) 直接查看
Headers 对象不是普通对象,JSON.stringify(headers) 会返回空对象 {}。调试时请用 Array.from(headers.entries()) 或浏览器 DevTools 的 console.table(headers)(部分浏览器支持)。


















