XMLHttpRequest: getAllResponseHeaders() メソッド

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

XMLHttpRequestgetAllResponseHeaders() メソッドは、すべてのレスポンスヘッダーを CRLF で区切った文字列として返し、レスポンスを受信していない場合は null を返します。

ネットワークエラーが発生した場合は、空文字列が返されます。

メモ: マルチパートリクエストでは、これはリクエストの元のチャンネルではなく、現在の部分を返します。

構文

js
getAllResponseHeaders()

引数

なし。

返値

CRLF で区切ったすべてのレスポンスヘッダー(フィールド名が Set-Cookie のものを除く)を表す文字列、またはレスポンスを受信していなければ 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) {
    // 生のヘッダー文字列を取得
    const headers = request.getAllResponseHeaders();

    // ヘッダー文字列を個別のヘッダーの
    // 配列に変換
    const arr = headers.trim().split(/[\r\n]+/);

    // ヘッダー名と値のマップを生成
    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 の中に入れます。

仕様書

Specification
XMLHttpRequest Standard
# the-getallresponseheaders()-method

ブラウザーの互換性

BCD tables only load in the browser

関連情報