Go to information

キャッシュ制御

Internet Explorer, Netscape, Firefox, Opera, Safari などのウェブブラウザには一度読み込んだデータをハードディスクに蓄えておくことにより、次からは高速にデータを表示することができるようにキャッシュ(cache)と呼ばれる機能を備えています。つまり、レンダリング速度を速めるために、一度ウェブサーバーからダウンロードしたウェブページの内容等はハードディスク内に蓄えておくことで、次に同じページを表示するときにはウェブサーバーを経由してデータをダウンロードするのではなく、ハードディスク内に蓄えておいたデータをそのまま表示します。しかし、この機能は頻繁に更新(上書き)されるリソース(情報資源)においては、あまり好ましい働きではありません。そのような場合に、UA がデータをリクエスト(要求)した際にウェブサーバーが返すメッセージ(HTTP応答ヘッダ)に「このデータはキャッシュしないように」と UA に命令をする設定を加えることで、常に最新のリソースを参照させることが可能です。

キャッシュしないように命令する設定

<Files ~ "\.(html|php|jpe?g|gif|png)$">
Header set Pragma no-cache
Header set Cache-Control no-cache
</Files>

まず、記述全体を囲んでいる Filesディレクティブは指定されているファイル名だけに、Filesディレクティブの中で定義されている他のディレクティブを適用させるように制限します。ここでは、拡張子に「html」,「php」,「jpg、または jpeg」,「gif」, 「png」をもつ5種類のファイルに対してのみ、Filesディレクティブの中で定義されている2行目と3行目の設定が反映されます。そして、2行目と3行目にある Headerディレクティブが、UA がウェブサーバーに対してデータをリクエストした際に、ウェブサーバーが UA に対して返す HTTP応答ヘッダの置換、追加、削除を行うディレクティブです。そして、Headerディレクティブに続くオプション(属性)でその処理を決めます。setオプションであれば、ヘッダを設定し、同じ名前のヘッダが存在する場合はそれを置き換えます。

ここで設定されている setオプションのヘッダは Pragmaヘッダと Cache-Controlヘッダです。Pragmaヘッダは HTTP/1.0 において汎用の HTTPヘッダとして定義されたもので、Pragmaヘッダに指定できる値は no-cache のみです。 そして no-cache は文字通りキャッシュしないようにする指令です。そして、今後も Pragmaヘッダには新たな値が定義される予定はないため、HTTP/1.1 においてキャッシュ制御する指示として Cache-Controlヘッダという専用のヘッダが定義されています。つまり、Pragmaヘッダが HTTP/1.0準拠用、Cache-Controlヘッダが HTTP/1.1準拠用の UA に対する指令です。アクセスしてくる UA の HTTPバージョンがわからない場合のために、この両方の指令を指定することになります。この設定により「html」,「php」,「jpg、または jpeg」,「gif」, 「png」をもつ5種類のファイルに限定して、UA に対してキャッシュしないように命令しています。これでデータを読み込む毎に常に最新のリソースを参照させることができます。

まとめと Headerディレクティブの構文

Header [ set | append | add ] ヘッダ名 "値"
Header [ unset | echo ] ヘッダ名

HTTP応答ヘッダの置換、追加、削除を行う Headerディレクティブには set, append, add, unset, echo の5つのオプション(属性)があり、それぞれ次のような処理を行います。

set
応答ヘッダを設定します。もし、同じ名前のヘッダが存在する場合は 置き換える。
append
応答ヘッダを既に存在する同じ名前のヘッダに追加します。新しい値が既存のヘッダに追加されるときには、既存のヘッダの後にコンマ(,)で区切られて追加されます。これはヘッダに複数の値を 指定するときの HTTP の標準的な方法です。
add
append と同義ですが、一般的には append の方を 使う方が良いとされます。
unset
指定された応答ヘッダが存在すれば、削除する。同じヘッダ名が複数あれば、すべて削除する。値をつけてはいけない。
echo
指定された同じ名前のリクエストヘッダを応答ヘッダで返す。ヘッダ名に正規表現も使える。値をつけてはいけない。

これらオプションの後に続いて、ヘッダ名を指定します。ここで取り上げた設定例では setオプションに続いて、Pragmaヘッダと Cache-Controlヘッダを指定しました。このヘッダ名には最後にコロン(;)を含めることもできますが、あっても無くても構いません。set, append, add, unset に続くヘッダ名は半角アルファベットの大文字・小文字が区別されません(case-insensitive)。つまり、Pragma と書いても、pragma と書いても同じです。ただし、echoオプションに続くヘッダ名は半角アルファベットの大文字・小文字を区別する(case-sensitive)ので厳密な指定が必要です。さらに echoオプションではヘッダ名に正規表現を使うこともできます。

set, append, add のオプションではヘッダ名に続いて、3つ目に値を指定します。もし、値に半角スペースを含む場合はダブルクォーテーション(")の引用符でくくる必要があります。ここで取り上げた、Pragmaヘッダと Cache-Controlヘッダに続いて、どちらも no-cache という値を指定しました。no-cache の値には半角スペースは含まれていないので、ダブルクォーテーション(")でくくる必要はありません。

現在位置
  1. W3G
  2. Others
  3. .htaccess
  4. キャッシュ制御
ナビゲーション
ステータス情報
作者
上田 遼
公開
2006-05-03T22:23:41+09:00
更新
2008-12-29T04:19:16+09:00
URI
http://w3g.jp/others/htaccess/cache_control
検索