XMLHttpRequest:getAllResponseHeaders() 方法

基线 广泛可用

此功能已得到充分确立,并且可在许多设备和浏览器版本上运行。它自以下时间起在浏览器中可用 2015 年 7 月.

注意:此功能在 Web Workers 中可用,但 Service Workers 除外。

XMLHttpRequest 方法 getAllResponseHeaders() 返回所有响应头(除了字段名称为 Set-Cookie 的响应头),以字符串形式分隔,或在未收到响应时返回 null

如果发生网络错误,则返回空字符串。

注意:对于 multipart 请求,这将返回请求的当前部分的标头,而不是原始通道的标头。

语法

js
getAllResponseHeaders()

参数

无。

返回值

表示所有响应标头(除了字段名称为 Set-Cookie 的标头)的字符串,以 CRLF 分隔,或在未收到响应时返回 null。如果发生网络错误,则返回空字符串。

原始标头字符串的示例

http
date: Fri, 08 Dec 2017 21:04:30 GMT\r\n
content-encoding: gzip\r\n
x-content-type-options: nosniff\r\n
server: meinheld/0.6.1\r\n
x-frame-options: DENY\r\n
content-type: text/html; charset=utf-8\r\n
connection: keep-alive\r\n
strict-transport-security: max-age=63072000\r\n
vary: Cookie, Accept-Encoding\r\n
content-length: 6502\r\n
x-xss-protection: 1; mode=block\r\n

每行都以回车符和换行符 (\r\n) 结尾。这些本质上是分隔每个标头的分隔符。

注意:在现代浏览器中,标头名称将根据最新规范以全小写形式返回。

示例

此示例检查请求的 readystatechange 事件中的标头。代码展示了如何获取原始标头字符串,以及如何将其转换为各个标头的数组,然后如何获取该数组并创建标头名称与其值的映射。

js
const request = new XMLHttpRequest();
request.open("GET", "foo.txt", true);
request.send();

request.onreadystatechange = () => {
  if (request.readyState === this.HEADERS_RECEIVED) {
    // Get the raw header string
    const headers = request.getAllResponseHeaders();

    // Convert the header string into an array
    // of individual headers
    const arr = headers.trim().split(/[\r\n]+/);

    // Create a map of header names to values
    const headerMap = {};
    arr.forEach((line) => {
      const parts = line.split(": ");
      const header = parts.shift();
      const value = parts.join(": ");
      headerMap[header] = value;
    });
  }
};

完成后,例如,您可以

js
const contentType = headerMap["content-type"];

这将 Content-Type 标头的值获取到 contentType 变量中。

规范

规范
XMLHttpRequest 标准
# the-getallresponseheaders()-method

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅