Headers - 对 HTTP 请求和响应头执行操作
Headers 是 Fetch API 的接口,允许您对 HTTP 请求和响应头执行各种操作。这些操作包括检索,设置,添加和删除。Headers 对象具有关联的标题列表,该列表最初为空,由零个或多个名称和值对组成。你可以使用像 append() 这样的方法来添加它(参见实例。)在这个接口的所有方法中,标题名称是由不区分大小写的字节序列匹配。
出于安全原因,某些标头只能由用户代理控制。这些标头包括禁用的标头名称和禁用的响应标头名称。
Headers 对象还有一个关联的 guard,它取值为 immutable,request,request-no-cors,response 或 none。这会影响 set(),delete() 和 append() 方法如何更改标头。有关更多信息,请参阅 Guard。
您可以通过 Request.headers 和 Response.headers 属性获取 Headers 对象,Headers.Headers() 也可以使用 Headers.Headers() 构造函数创建一个新的 Headers 对象。
实现 Headers 的对象可以直接用于 for...of 结构,而不是 entries():for (var p of myHeaders) 相当于 for (var p of myHeaders.entries())。
注意:通过阅读我们的 HTTP 标头参考,您可以找到有关可用标头的更多信息。
构造函数
Headers()
创建一个新的 Headers 对象。
方法
Headers.append()
将新值附加到 Headers 对象内的现有标头上,或者如果标头尚不存在则添加该标头。
Headers.delete()
从 Headers 对象中删除标头。
Headers.entries()
返回一个 iterator,允许遍历此对象中包含的所有键/值对。
Headers.forEach()
为每个数组元素执行一次提供的函数。
Headers.get()
返回 Headers 对象中具有给定名称的标头的所有值的 ByteString 序列。
Headers.has()
返回一个 boolean,表示 Headers 对象是否包含某个标题。
Headers.keys()
返回一个 iterator,允许您遍历此对象中包含的键/值对的所有键。
Headers.set()
为 Headers 对象内的现有标头设置新值,或者如果标头尚不存在则添加标头。
Headers.values()
返回一个 iterator,允许您遍历此对象中包含的键/值对的所有值。
注意:要说清楚的是,
Headers.set()和Headers.append()之间的区别在于,如果指定的标题已经存在存在并接受多个值,Headers.set()将使用新值覆盖现有值,而Headers.append()将追加新值值到这组值的末尾。有关实例代码,请参阅其专用页面。
注意:所有 Headers 方法中,如果您尝试传入对不是 有效 HTTP 头名称 的名称的引用,则都将抛出
TypeError。如果标头具有不可变的 Guard,则更改操作将抛出TypeError。在任何其他失败的情况下,他们会静默失败。
注意:当迭代 Header 值时,它们会按字典顺序自动排序,并且组合来自重复标题名称的值。
过时的方法
Headers.getAll()
用于返回具有给定名称的 Headers 对象中的标头的所有值的数组; 此方法现已从规范中删除,Headers.get() 现在返回给定名称的所有值,而不是第一个。
实例
在下面的代码片段中,我们使用 Headers() 构造函数创建一个新的标头,使用 append() 为它添加一个新的标头,然后使用 get() 返回标头的值:
var myHeaders = new Headers();
myHeaders.append('Content-Type', 'text/xml');
myHeaders.get('Content-Type') // 会返回 'text/xml'
通过将数组数组或对象文字传递给构造函数可以实现相同的目的:
var myHeaders = new Headers({
'Content-Type': 'text/xml'
});
// 或者,使用二级数组:
myHeaders = new Headers([
['Content-Type', 'text/xml']
]);
myHeaders.get('Content-Type') // 会返回 'text/xml'
规范
| 规范 | 状态 | 备注 |
|---|---|---|
| Fetch Headers 的定义 |
现行的标准 | - |
桌面浏览器兼容性
| 特性 | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|---|
| 基础支持 | 42 41 | 支持 | 39 34 | 不支持 | 29 28 | 10.1 |
| 字典排序,以及迭代时组合的重复标题名称的值。 | 未知 | 未知 | 44 | 不支持 | 24 | 不支持 |
Headers() 构造函数 | 42 41 | 未知 | 39 34 | 不支持 | 29 28 | 10.1 |
append | 42 41 | 支持 | 39 34 | 不支持 | 29 28 | 10.1 |
delete | 42 41 | 支持 | 39 34 | 不支持 | 29 28 | 10.1 |
entries | 45 | 16 | 44 | 未知 | 32 | 未知 |
get | 42 41 | 支持 | 521 39 34 | 不支持 | 29 28 | 10.1 |
getAll | 42 — 60 | 支持 | 39 — 52 34 | 不支持 | 29 — 47 | 不支持 |
has | 42 41 | 支持 | 39 34 | 不支持 | 29 28 | 不支持 |
keys | 45 | 16 | 44 | 未知 | 32 | 未知 |
set | 42 41 | 支持 | 39 34 | 不支持 | 29 28 | 不支持 |
values | 45 | 16 | 44 | 未知 | 32 | 未知 |
移动浏览器兼容性
| 特性 | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
|---|---|---|---|---|---|---|---|
| 基础支持 | 42 41 | 42 41 | 未知 | 44 | 未知 | 29 28 | 不支持 |
| 字典排序,以及迭代时组合的重复标题名称的值。 | 未知 | 未知 | 未知 | 不支持 | 未知 | 未知 | 不支持 |
Headers() 构造函数 | 42 41 | 42 41 | 未知 | 不支持 | 未知 | 29 28 | 不支持 |
append | 42 41 | 42 41 | 支持 | 不支持 | 未知 | 29 28 | 不支持 |
delete | 42 41 | 42 41 | 支持 | 不支持 | 未知 | 29 28 | 不支持 |
entries | 45 | 45 | 支持 | 44 | 未知 | 32 | 未知 |
get | 42 41 | 42 41 | 支持 | 不支持 | 未知 | 29 28 | 不支持 |
getAll | 42 — 60 | 42 — 60 | 支持 | 不支持 | 未知 | 29 — 47 | 不支持 |
has | 42 41 | 42 41 | 支持 | 不支持 | 未知 | 29 28 | 不支持 |
keys | 45 | 45 | 支持 | 44 | 未知 | 32 | 未知 |
set | 42 41 | 42 41 | 支持 | 不支持 | 未知 | 29 28 | 不支持 |
values | 45 | 45 | 支持 | 44 | 未知 | 32 | 未知 |
1. 在 Firefox 52 之前,get() 只返回指定标头中的第一个值,getAll() 返回所有值。从 52 开始,get() 现在返回所有值,并且 getAll() 已被删除。