Apache HTTP サーバ バージョン 2.2
This document refers to a legacy release (2.2) of Apache httpd. The active release (2.4) is documented here. If you have not already upgraded, please follow this link for more information.
You may follow this link to go to the current version of this document.
説明: | HTTP リクエストのヘッダと応答のヘッダのカスタマイズ |
---|---|
ステータス: | Extension |
モジュール識別子: | headers_module |
ソースファイル: | mod_headers.c |
このモジュールは HTTP のリクエストヘッダと応答ヘッダを制御し、 変更するためのディレクティブを提供します。ヘッダを追加したり、 置き換えたり、削除したりすることができます。
mod_header
のディレクティブはサーバ設定のほぼどこにでも
書くことができ、影響する範囲を設定用セクションで囲むことで限定する
ことができます。
処理の順番は重要で、設定ファイル中の順番と、設定用セクション内の位置との両方に 影響されます。以下の二つのヘッダは順番が逆になると 違う結果になります:
RequestHeader append MirrorID "mirror 12"
RequestHeader unset MirrorID
この順番の場合は、MirrorID
ヘッダは設定されません。
逆になっていると、MirrorID ヘッダは "mirror 12" に設定されます。
mod_headers
では、リクエストの早期か後期かの
どちらで適用するかを選べます。通常は後期モードで、
コンテンツ生成が実行される直前にリクエストヘッダがセットされ、
レスポンスとして送出される直前にレスポンスヘッダがセットされます。
運用中のサーバでは必ず後期モードを使ってください。
早期モードは開発者向けのテスト/デバッグ用に設計されています。
early
キーワード指定されたディレクティブによって、
リクエスト処理の開始地点になります。
つまり、異なるリクエストを試したりテストケースをセットアップするのに
活用できる一方で、レスポンスを生成する前に他のモジュールによって
ヘッダが書き換えられてしまうかもしれないということを意味します。
early ディレクティブではリクエストパスの設定が解決される前に
処理されるので、メインサーバかバーチャルホストコンテキストでのみ、
早期ヘッダをセットできます。early ディレクティブはリクエストパスに
依存することはできませんので、<Directory>
や
<Location>
といったコンテキスト内では使用
できません。
Header echo ^TS
MyHeader
を応答に追加します。このヘッダはクライアントが
サーバの負荷を直観的に知るためや、クライアント-サーバ間の
ボトルネックを調べるために使うことができます。
Header add MyHeader "%D %t"
上記の設定では、以下のようなヘッダが応答に追加されることになります:
MyHeader: D=3775428 t=991424704447256
Header add MyHeader "Hello Joe. It took %D microseconds for Apache to serve this request."
以下のようなヘッダが応答に追加されることになります
MyHeader: Hello Joe. It took D=3775428 microseconds for Apache to serve this request.
MyHeader
を応答に
付けます。これは、クライアントの要求に応えてヘッダを作成するときに
役に立ちます。この例では mod_setenvif
モジュールが必要なことに
注意してください。
SetEnvIf MyRequestHeader value HAVE_MyRequestHeader
Header add MyHeader "%D %t mytext" env=HAVE_MyRequestHeader
もし HTTP リクエストに MyRequestHeader: value
ヘッダが
あると、応答には以下のようなヘッダが付加されます。
MyHeader: D=3775428 t=991424704447256 mytext
説明: | HTTP 応答ヘッダの設定 |
---|---|
構文: | Header [condition] set|append|add|unset|echo
header [value] [early|env=[!]variable] |
コンテキスト: | サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess |
上書き: | FileInfo |
ステータス: | Extension |
モジュール: | mod_headers |
このディレクティブは HTTP 応答ヘッダを置換、追加、削除できます。 ヘッダはコンテントハンドラや出力フィルタが実行された直後に実行され、 出て行くヘッダを変更できるようになっています。
オプションの condition は onsuccess
か
always
のどちらかを指定できます。これは内部ヘッダテーブルのどれを
操作するかを決定します。onsuccess
は 2xx
ステータスコードの、always
は全てのステータスコード
(2xx
を含む) の意味になります。
あるモジュールでセットされるヘッダをアンセットしたい場合は特に、
どのテーブルが影響を受けるかを実際に試したほうがよいでしょう。
行なう処理は二番目のの引数で決まります。 この引数には次の値を指定できます:
set
append
add
append
の方を
使う方が良いでしょう。unset
echo
この引数の後にはヘッダ名 (header) が続きます。
ヘッダ名には最後にコロンを含めることもできますが、無くても構いません。
set
, append
, add
,
unset
では大文字小文字は
区別されません。echo の header 名は大文字小文字を区別し、
正規表現を指定することもできます。
add
, append
,
set
では value を三つ目の
引数として指定します。value に空白がある場合は二重引用符で
囲む必要があります。value は文字のみからなる文字列、
フォーマット指示子を含む文字列、もしくは両方からなる文字列を指定できます。
value は以下のフォーマット指示子をサポートします:
フォーマット | 解説 |
---|---|
%% |
パーセント記号 |
%t |
リクエストを受け取った時刻を、
Universal Coordinated Time での始まりの時刻 (Jan. 1, 1970) から経過した
時間をマイクロ秒として表したもの。値の最初には
t= が付加されます。 |
%D |
リクエストを受け取った時刻と、ヘッダを送り出した
時間との差。これは、リクエストが存在していた期間を表します。
値の最初には D= が付加されます。 |
%{FOOBAR}e |
環境変数
FOOBAR の値です。 |
%{FOOBAR}s |
mod_ssl が有効な場合、
SSL 環境変数 FOOBAR
の内容 |
%s
フォーマット指定子は 2.1 以降でのみ利用できます。
SSLOptions +StdEnvVars
を有効にすることによるオーバーヘッドを
避けるため、%e
の代わりとして使えます。
他の理由などがあって、どうしても SSLOptions +StdEnvVars
を有効にしなければならない場合は、%e
のほうが
%s
よりも処理効率は良いです。
Header
ディレクティブには追加の引数を持たせることが
できて、どういったアクションが行われたかの条件を指定したり、
早期処理 を指定する early
キーワードを
指定できます。
env=...
引数で指定された 環境変数 が存在する (もしくは env=!...
が指定されていて環境変数が存在しない) 場合は、Header
ディレクティブで指定された動作が行なわれます。そうでない場合は、
ディレクティブはそのリクエストには何もしません。
早期処理モードの場合以外では、
Header
ディレクティブは応答がネットワークに送られる直前に
処理されます。これは、ヘッダフィルタにより追加されるヘッダを
除き、ほとんどのヘッダを設定したり上書きしたりすることが
可能、ということです。
説明: | HTTP リクエストヘッダの設定 |
---|---|
構文: | RequestHeader set|append|add|unset header
[value] [early|env=[!]variable] |
コンテキスト: | サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess |
上書き: | FileInfo |
ステータス: | Extension |
モジュール: | mod_headers |
このディレクティブは HTTP リクエストヘッダを置換、追加、削除できます。 ヘッダはコンテントハンドラが実行される直前に実行され、 入って来るヘッダを変更することが可能になっています。 行なう処理は第 1 引数により決まります。これには以下の値を指定 することができます:
set
append
add
append
の方を
使う方が良いでしょう。unset
この引数の後にはヘッダ名 (header) が続きます。
ヘッダ名には最後にコロンを含めることもできますが、無くても構いません。
大文字小文字は区別されません。add
,
append
, set
の場合は、value が三つ目の
引数として指定されます。value に空白がある場合は二重引用符で
囲む必要があります。unset の場合は、value は指定しません。
value は文字列、フォーマット指定子、あるいは、その混合です。
使うことのできるフォーマット指定子は、Header
と同じですので、
詳細はそちらをご覧ください。
RequestHeader
ディレクティブは、
どういった条件下でアクションを行うかを指定する追加引数
あるいは、早期処理 を指定する early
キーワードを設定することができます。
env=...
の引数で設定されている
環境変数 が存在している
(あるいは env=!...
で指定された環境変数が
存在しない) 場合、RequestHeader
ディレクティブは
有効になります。それ以外の場合、ディレクティブは効力を持ちません。
early モードでない場合に限り、
RequestHeader
ディレクティブは
fixup フェーズでリクエストがハンドラに扱われる直前に
処理されます。これにより、ブラウザや Apache の入力フィルタにより
生成されたヘッダを上書きしたり修正したりできるようになっています。