web-dev-qa-db-ja.com

Apache:「Header always set」と「Header set」の違いは?

ご質問

  1. ApacheのHeader always setHeader setの違いは何ですか?
  2. つまり、ヘッダーが設定される状況に関して、alwaysキーワードは何を変更しますか?
  3. 常にalwaysを使用してヘッダーを設定する必要がありますか?
  4. しない理由はありますか?

バックグラウンド

私は見た...

Header always set X-Frame-Options DENY

...と同様...

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

...そして、alwaysキーワードの存在は、ヘッダーが適切に設定されることを保証する、または一般的にalwaysキーワードを含める方が良いと聞くことがあります。しかし、whyの明確で決定的な答えを見つけたことはありません。

Apache docs for mod_headers を確認しましたが、これはalwaysについて簡単に言及しています:

アクションが既存のヘッダーの関数である場合、元のヘッダーが設定された内部テーブルに応じて、常に条件を指定する必要があります。常に対応するテーブルは、ローカルで生成されたエラー応答と成功に使用されます反応。また、常に既存のヘッダーに関するonsuccessのスーパーセットではないため、いくつかのシナリオでは両方の条件でこのディレクティブを繰り返すことが意味があることに注意してください。

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

私が知る限り、これはHeader set alwaysがヘッダーが200ページ以外でも設定されることを保証することを意味します。ただし、Header setで設定されたHTTPヘッダーは、常に404ページなどにうまく適用されるように見えます。ここで何か誤解していますか?

FWIW、SO Apacheのヘッダー設定の「常に」と「成功」の違いは何ですか? が見つかりましたが、唯一の答えはありませんでした」 tは本当に私にそれを明確に説明します。

どうもありがとう、
カレブ

24
caleb531

常に設定されるヘッダーとApacheで設定されるヘッダーの違いは何ですか?

マニュアルから引用されたビットが言うように、「常に」がなければ、あなたの追加は成功した応答でのみ出てきます。

ただし、これにはmod_proxyを介した「成功した」転送エラーや、おおよそプロキシのように振る舞う他の同様のハンドラも含まれます。マニュアルに同意しないことが判明した404を生成するものは何ですか?ローカルファイルの404は、引用されたビットの説明どおりに動作します。

つまり、ヘッダーが設定されている状況に関してalwaysキーワードは何を変更しますか?

ApacheのAPIは、ヘッダーとerr_headersの各リクエストに関連付けられた2つのリストを保持します。前者は、サーバーでリクエストの処理中にエラーが発生した場合、後者は使用されません。

Alwaysを常に使用してヘッダーを設定する必要がありますか?

それは彼らの重要性に依存します。あるリソースに役立つと期待していたものに関連するCache-Controlヘッダーを設定していたとしましょう。今、あなたが実際に400や502のようなものを提供していたとしましょう。それをキャッシュしたくないかもしれません!

しない理由はありますか?

上記を参照。

-/-

また、エラーコードのプロキシまたはCGIについて説明しているが、Apacheがエラー応答を生成しているものについては説明していない、引用されていないマニュアルもあります。

オプションの条件引数は、このディレクティブが動作する応答ヘッダーの内部テーブルを決定します。名前にかかわらず、onsuccessのデフォルト値は、アクションを2xxステータスコードの応答に制限しません。

この条件で設定されたヘッダーは、たとえば、要求が正常にプロキシされたり、CGIによって生成されたり、失敗したステータスコードを生成した場合でも使用されます。

22
covener