ApacheのHTTP基本認証応答のために、アクセスコントロールオロウオリジンヘッダーをどのように設定しますか?

StackOverflow https://stackoverflow.com/questions/7375739

質問

XHRを使用して、HTTP基本認証を使用するサイトにログインしたいと思います。次の作品はこれを行います。

http = new XMLHttpRequest();
http.open("get", "http://...", false, username, password);
http.send("");

問題はこれです ではない 認証があるドメインとは異なるドメインから作業します。ソリューションは十分にシンプルです。アクセス制御コントロールオリジンヘッダーを *に設定します。そこで、Apacheの構成をこれに変更しました。

<Location />
    Header set Access-Control-Allow-Origin "*"

    AuthType Basic
    AuthName "trac"
    AuthUserFile /home/admin/development/pass.htpasswd
    Require valid-user
</Location>

そのページからの応答は次のように見えます:

HTTP/1.1 401 Authorization Required
Connection: Keep-Alive
Content-Encoding: gzip
Content-Length: 345
Content-Type: text/html; charset=iso-8859-1
Date: Sun, 11 Sep 2011 01:17:55 GMT
Keep-Alive: timeout=15, max=100
Vary: Accept-Encoding
WWW-Authenticate: Basic realm="trac"

応答には、アクセス制御コントロールオリジンヘッダーがありません。これは奇妙に思えます。

内部ページに同じヘッダーディレクティブを使用すると、ヘッダーが設定されます。

なぜヘッダーが設定されなかったのですか? ApacheのHTTP基本認証応答のために、アクセスコントロールオロウオリジンヘッダーをどのように設定しますか?

役に立ちましたか?

解決

答えは次のとおりです。

Header always set Access-Control-Allow-Origin "*"

それ以外の

Header set Access-Control-Allow-Origin "*"

そしてその理由はにあります ヘッダー指令のドキュメント:

Header [condition] set|append|merge|add|unset|echo|edit header [value] [replacement] [early|env=[!]variable]

オプションの条件引数は、この指令が動作する応答ヘッダーの内部表を決定します。サーバーの他のコンポーネントが、OnSuccessに対応するテーブルまたは常に対応するテーブルのいずれかに応答ヘッダーを保存している可能性があります。 "いつも" これに関連して、追加するヘッダーが成功した応答と失敗の両方の応答の両方で送信されるかどうかを指しますが、アクションが既存のヘッダーの関数である場合、さらなる合併症のために読む必要があります。

OnSuccessのデフォルト値は、以下にリストされている状況と同様の状況下で常に変更する必要がある場合があります。また、両方の条件でこの指令を繰り返すことは、既存のヘッダーに関して常にOnSuccessのスーパーセットではないため、いくつかのシナリオでは意味があります。

  • リダイレクトなど、非サクセス(非2xx)応答にヘッダーを追加します。この場合、究極の応答で常に対応するテーブルのみが使用されます。
  • CGIスクリプトによって生成されたヘッダーを変更または削除します。この場合、CGIスクリプトは、デフォルトのテーブルではなく、常に対応するテーブルにあります。
  • サーバーの一部によって生成されたヘッダーを変更または削除しますが、そのヘッダーはデフォルトのOnSuccess条件によって見つかりません。

あなたの場合、あなたはaを送ります 401 古典的な200応答の代わりに応答し、ヘッダーはにのみ設定されます 200 使用しない場合の応答 always キーワード。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top