Headers - 对 HTTP 请求和响应头执行操作

HeadersFetch API 的接口,允许您对 HTTP 请求和响应头执行各种操作。这些操作包括检索,设置,添加和删除。Headers 对象具有关联的标题列表,该列表最初为空,由零个或多个名称和值对组成。你可以使用像 append() 这样的方法来添加它(参见实例。)在这个接口的所有方法中,标题名称是由不区分大小写的字节序列匹配。

出于安全原因,某些标头只能由用户代理控制。这些标头包括禁用的标头名称禁用的响应标头名称

Headers 对象还有一个关联的 guard,它取值为 immutablerequestrequest-no-corsresponsenone。这会影响 set()delete()append() 方法如何更改标头。有关更多信息,请参阅 Guard

您可以通过 Request.headersResponse.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 的定义
现行的标准 -

桌面浏览器兼容性

特性ChromeEdgeFirefoxInternet ExplorerOperaSafari
基础支持

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
entries451644 未知32 未知
get

42

41

支持

521

39

34

不支持

29

28

10.1
getAll42 — 60 支持

39 — 52

34

不支持29 — 47 不支持
has

42

41

支持

39

34

不支持

29

28

不支持
keys451644 未知32 未知
set

42

41

支持

39

34

不支持

29

28

不支持
values451644 未知32 未知

移动浏览器兼容性

特性AndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS 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

不支持
entries4545 支持44 未知32 未知
get

42

41

42

41

支持 不支持 未知

29

28

不支持
getAll42 — 6042 — 60 支持 不支持 未知29 — 47 不支持
has

42

41

42

41

支持 不支持 未知

29

28

不支持
keys4545 支持44 未知32 未知
set

42

41

42

41

支持 不支持 未知

29

28

不支持
values4545 支持44 未知32 未知

1. 在 Firefox 52 之前,get() 只返回指定标头中的第一个值,getAll() 返回所有值。从 52 开始,get() 现在返回所有值,并且 getAll() 已被删除。

相关链接