And XMLHttpRequest.getResponseHeader()
の結果が、返された実際のヘッダーと常に一致するとは限らないことに気付きました(リクエストが通常の方法で行われた場合)。
たとえば、https://foo.example.com/api/resource/100
に対してxhr
リクエストを行っているとします。 Chromeの開発者コンソールの[ネットワーク]で、応答が行われていることを確認できます。すべての応答ヘッダー(たとえば10)も確認できます。ただし(コピー貼り付けされたコンソール):
> response
XMLHttpRequest
> response.getAllResponseHeaders();
"content-type: text/html
"
使用可能なヘッダーに制限はありますか?これは応答タイプに依存していますか? 404のヘッダーの完全なセットを取得したのを覚えていますが、400のヘッダーはこれだけです。
何ができますか?
XMLHttpRequest API の標準化の現在の状態では、Set-CookieおよびSet-Cookie2ヘッダーフィールド:
client。getAllResponseHeaders()
フィールド名が_
Set-Cookie
_または_Set-Cookie2
_であるヘッダーを除いて、応答からすべてのヘッダーを返します。
他のヘッダーフィールドは返されます。
ただし、クロスオリジンリクエストを実行している場合、元のXMLHttpRequestでは同じオリジンリクエストしか許可されないため、ブラウザは XMLHttpRequest Level 2 を実装する必要があります。
XMLHttpRequestレベル2仕様は、クロスオリジンリクエストなどの新機能でXMLHttpRequestオブジェクトを拡張します[…]
「 Cross-Origin Resource Sharing仕様 は、ヘッダー getResponseHeader() によって公開されるヘッダーをフィルターするヘッダーをフィルターします same-Origin リクエスト。」そして、その仕様は 単純な応答ヘッダーフィールド (つまりCache-Control、を除く)以外の応答ヘッダーフィールドへのアクセスを禁止します-Language、Content-Type、Expires、Last-Modified、およびPragma):
ユーザーエージェントは、単純な応答ヘッダー以外のすべての応答ヘッダーを除外する必要があります[…]
例えば。したがって、XMLHttpRequestの
getResponseHeader()
メソッドは、上記に示されていないヘッダーを公開しません。
Access-Control-Allow-Origin
ヘッダーと、どのヘッダーがブラウザーに公開されるのを防ぐための方法。 mozillaのドキュメント 。