web-dev-qa-db-ja.com

XMLHttpRequestのgetResponseHeader()の制限?

And XMLHttpRequest.getResponseHeader()の結果が、返された実際のヘッダーと常に一致するとは限らないことに気付きました(リクエストが通常の方法で行われた場合)。

たとえば、https://foo.example.com/api/resource/100に対してxhrリクエストを行っているとします。 Chromeの開発者コンソールの[ネットワーク]で、応答が行われていることを確認できます。すべての応答ヘッダー(たとえば10)も確認できます。ただし(コピー貼り付けされたコンソール):

> response
  XMLHttpRequest
> response.getAllResponseHeaders();
  "content-type: text/html
  " 

使用可能なヘッダーに制限はありますか?これは応答タイプに依存していますか? 404のヘッダーの完全なセットを取得したのを覚えていますが、400のヘッダーはこれだけです。

何ができますか?

29
maligree

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を除く)以外の応答ヘッダーフィールドへのアクセスを禁止します-LanguageContent-TypeExpiresLast-Modified、およびPragma):

ユーザーエージェントは、単純な応答ヘッダー以外のすべての応答ヘッダーを除外する必要があります[…]

例えば。したがって、XMLHttpRequestのgetResponseHeader()メソッドは、上記に示されていないヘッダーを公開しません。

37
Gumbo

Access-Control-Allow-Originヘッダーと、どのヘッダーがブラウザーに公開されるのを防ぐための方法。 mozillaのドキュメント

3
maligree