3

私はAngularで少し遊んでいて、小さな問題に遭遇しました。

http 応答のカスタム ヘッダーを設定し、後で角度側でその値を読み取ろうとしています。ヘッダーが設定されており、Chrome のデバッグ ツールが次のことを確認しているため、それは確かです。

応答ヘッダー

つまり、サーバー側は問題ありません。ここまでは順調ですね。

angularでhttp応答インターセプターを介してヘッダーにアクセスし、それらをコンソールに表示しようとすると、問題が発生します。コーヒースクリプトのコードは次のとおりです。

angular.module('app').factory 'httpInterceptor', function($q) ->
  (promise) ->
    success = (response) ->
      console.log response.headers()
      response
    error = (response) ->
      $q.reject(response)

    promise.then success, error

angular.module('app').config ($httpProvider) ->
  $httpProvider.responseInterceptors.push('httpInterceptor')

そして、私は出力を取得します:

コンソール出力

angular がこれらすべてのヘッダーを削除する理由が本当にわかりません。誰か説明してくれませんか?カスタム ヘッダーの値にアクセスする方法はありますか?

前もって感謝します。

4

1 に答える 1

12

私は自分自身の質問に対する答えを見つけました。Angular のせいではありません。問題は、CORSを使用していることです。

CORSのドキュメントでそのような情報を見つけました:

ユーザー エージェントは、単純な応答ヘッダーであるか、フィールド名が Access-Control-Expose-Headers ヘッダー (存在する場合) の値の 1 つに一致する ASCII の大文字と小文字を区別しないもの以外のすべての応答ヘッダーを除外する必要があります。 CORS API 仕様で定義された API に応答ヘッダーを公開する前。

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

これは、単純に header を追加する必要があることを意味しAccess-Control-Expose-Headers: custom-headerます。

于 2013-08-08T12:12:42.280 に答える