mod_expires - Apache HTTP サーバ バージョン 2.4

Apache HTTP サーバ バージョン 2.4

Apache > HTTP サーバ > ドキュメンテーション > バージョン 2.4 > モジュール

# Apache モジュール mod_expires

翻訳済み言語: en | fr | ja | ko

この日本語訳はすでに古くなっている 可能性があります。 最近更新された内容を見るには英語版をご覧下さい。

説明: | ユーザの指定した基準に基づいた `Expires` と `Cache-Control` HTTP ヘッダの生成
ステータス: | Extension
モジュール識別子: | expires_module
ソースファイル: | mod_expires.c

### 概要

このモジュールはサーバ応答の `Expires` HTTP ヘッダ と `Cache-Control` ヘッダの `max-age` ディレクティブの 設定を制御します。元のファイルが作成された時刻または クライアントのアクセス時刻のどちらかに基づいて期限切れ日を 設定することができます。

これらのヘッダはクライアントに文書の 有効性と継続性を指示します。文書がキャッシュされた場合には、 指定時刻に達するまでは、元の場所から取得する代わりに キャッシュされているものを使うことができます。その後は、 キャッシュにあるコピーは期限切れ (expired) で無効であるとされ、 元の場所から新しいものを取得する必要があります。

`max-age` 以外 (RFC 2616 section 14.9 参照) の `Cache-Control` のディレクティブを 操作するには `Header` ディレクティブを 使うことができます。

### トピック

- 代替期間指定構文

### ディレクティブ

### Bugfix checklist

- httpd changelog
- Known issues
- Report a bug

### 参照

- コメント

## 代替期間指定構文

`ExpiresDefault` ディレクティブと `ExpiresByType` ディレクティブは 以下のより読み易い構文を使って定義することができます:

`ExpiresDefault "<base> [plus] {<num> <type>}*"
ExpiresByType type/encoding "<base> [plus] {<num> <type>}*"`

<base> は以下のどれかです:

- `access`
- `now` ('`access`' と等価)
- `modification`

`plus` キーワードは省略可能です。<num> は (`atoi()` が受け付ける) 整数値、 <type> は以下のどれかです:

- `years`
- `months`
- `weeks`
- `days`
- `hours`
- `minutes`
- `seconds`

例えば、以下のディレクティブはどれもデフォルトで文書がアクセスの 1 ヶ月後に 期限が切れるようにするために使えます:

`ExpiresDefault "access plus 1 month"
ExpiresDefault "access plus 4 weeks"
ExpiresDefault "access plus 30 days"`

期限切れ時刻はいくつか '<num> <type>' 節を追加することでより細かく 制御することができます:

`ExpiresByType text/html "access plus 1 month 15 days 2 hours"
ExpiresByType image/gif "modification plus 5 hours 3 minutes"`

修正時刻に基づいた設定を使用している場合、Expires ヘッダは ディスクのファイル以外のコンテンツには追加されないことに注意 してください。そのようなコンテンツには修正時刻は存在しないからです。

## ExpiresActive ディレクティブ

説明: | `Expires` ヘッダの生成を有効にする
構文: | `ExpiresActive On|Off`
コンテキスト: | サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess
上書き: | Indexes
ステータス: | Extension
モジュール: | mod_expires

このディレクティブは対応するドキュメントの領域で `Expires` と `Cache-Control`ヘッダを 有効にするか無効にするかを決めます。 (例えば、`.htaccess` ファイルではそのディレクトリの 文書のみに適用されるということです。) `Off` に 設定された場合は対応領域でそれらのヘッダは 生成されません (`.htaccess` がサーバ設定ファイルの設定を 上書きする、というような下位レベルでの上書きがされていなければ)。 `On` に設定されていれば、ヘッダは `ExpiresByType` ディレクティブと `ExpiresDefault` ディレクティブ の基準に従って文書にヘッダを追加します (各ディレクティブ参照)。

このディレクティブは `Expires` と `Cache-Control` ヘッダの存在を 保証するわけではないことに注意してください。基準が満たされて いない場合はヘッダは追加されず、結果としてこのディレクティブが 指定されていなかったかのようにさえ見えることになります。

## ExpiresByType ディレクティブ

説明: | MIME タイプによって設定される `Expires` ヘッダの値
構文: | `ExpiresByType MIME-type <code>seconds`
コンテキスト: | サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess
上書き: | Indexes
ステータス: | Extension
モジュール: | mod_expires

このディレクティブは指定されたタイプのドキュメント (例えば `text/html`) に対して生成される `Expires` ヘッダと `Cache-Control` ヘッダの `max-age` ディレクティブの値を定義します。 二つ目の引数は期限切れの日時を生成するための基準時刻に追加される 秒数を設定します。`Cache-Control: max-age` は期限切れの時刻からリクエスト時刻を引いたものを秒で 表すことで生成されます。

基準時刻はファイルの最終修正時刻か、クライアントのドキュメントへの アクセス時刻です。どちらを使うべきかは `<code>` によって指定します。`M` は基準時刻として ファイルの最終修正時刻をという意味で、`A` はクライアントの アクセス時刻を使うという意味になります。

効果には微妙な違いがあります。`M` が使用された場合は、 すべてのキャッシュにある現在のドキュメントキャッシュは同時に期限が 切れます。これは同じ URL に毎週常に置かれる報せのようなものには 非常に有効です。`A` が使用された場合は、期限切れの 時間は各クライアントよって異なります。これはあまり変更されない 画像ファイルなど、特に関連するドキュメント群がすべて同じ画像を 参照するとき (すなわち画像が比較的短い期間内に繰り返し アクセスされるとき) に有効です。

### 例:

`# enable expirations
ExpiresActive On
# expire GIF images after a month in the client's cache
ExpiresByType image/gif A2592000
# HTML documents are good for a week from the
# time they were changed
ExpiresByType text/html M604800`

このディレクティブは `ExpiresActive On` が指定されている ときのみ有効であることに注意してください。これは、 指定された MIME タイプに対してのみ `ExpiresDefault` ディレクティブで 設定された期限切れ期日を上書きします。

この文書の前の方で説明されている代替構文を 使って期限切れ期日の計算方法を指定することもできます。

## ExpiresDefault ディレクティブ

説明: | 期限切れ期日を計算するデフォルトアルゴリズム
構文: | `ExpiresDefault <code>seconds`
コンテキスト: | サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess
上書き: | Indexes
ステータス: | Extension
モジュール: | mod_expires

このディレクティブは対応する範囲のすべてのドキュメントに対して デフォルトの期限切れ期日の計算アルゴリズムを設定します。`ExpiresByType` ディレクティブによって タイプ毎に上書きすることができます。引数の構文はそのディレクティブの 説明を参照してください。また、代替構文も 参照してください。

翻訳済み言語: en | fr | ja | ko

## コメント

Notice:
This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our mailing lists.