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()
已被删除。