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.
XMLHttpRequest
の getAllResponseHeaders()
メソッドは、すべてのレスポンスヘッダーを CRLF で区切った文字列として返し、レスポンスを受信していない場合は null
を返します。
ネットワークエラーが発生した場合は、空文字列が返されます。
メモ: マルチパートリクエストでは、これはリクエストの元のチャンネルではなく、現在の部分を返します。
構文
getAllResponseHeaders()
引数
なし。
返値
CRLF で区切ったすべてのレスポンスヘッダー(フィールド名が Set-Cookie
のものを除く)を表す文字列、またはレスポンスを受信していなければ null
です。ネットワークエラーが発生した場合は、空文字列が返されます。
生のヘッダー文字列がどのように見えるかの例です。
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
イベントの中でヘッダーを調べます。このコードは生のヘッダー文字列を取得する方法、またそれを個別のヘッダーの配列に変換する方法、そして配列からヘッダー名とその値のマップを生成する方法を示しています。
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;
});
}
};
いったんこれを行えば、次のようなことができます。
const contentType = headerMap["content-type"];
これは Content-Type
ヘッダーの値を変数 contentType
の中に入れます。
仕様書
Specification |
---|
XMLHttpRequest Standard # the-getallresponseheaders()-method |
ブラウザーの互換性
BCD tables only load in the browser
関連情報
- XMLHttpRequest の使用
- リクエストヘッダーの設定:
setRequestHeader()