PHPでブラウザキャッシュを無効化する方法

/ PHP / Comment[0]

今までブラウザキャッシュに悩まされてきた開発者は多いでしょう。ブラウザのキャッシュを無効化すべく、HTML4以前は次のようなコードをHTML中に書き込んでいたりしました。

<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Expires" content="0">

しかしこのコードは現在効きません。
HTML5ではPragma,Cache-Control,Expiresはエラーとなります。そこでHTML5と共にappcacheというキャッシュコントロールの仕様の案が出ました。appcacheは決められた構文に従ってルールが書かれたテキストファイルを作り、そのファイルをhtml要素のmanifest属性で指定して有効化する"ワケ"です。

<html manifest="test.appcache">
CACHE MANIFEST
# version: 1.0.0

CACHE:
ajax-loader.gif

FALLBACK:
/main.py /static.html
images/large/ images/offline.jpg

NETWORK:
*

http://qiita.com/hidekuro/items/dea83ebdf73e2f2277ae
https://developer.mozilla.org/ja/docs/Web/HTML/Using_the_application_cache

しかしこのappcacheも非推奨となりました。

本題

ブラウザはサーバにリクエストを送り、サーバからレスポンスコード200と(ほとんどの環境で)Etagと一緒にデータをもらうわけです。次回アクセス時はサーバから受け取ったEtagをリクエストヘッダーに含めることで、サーバにローカルとサーバ上のファイルのEtagを比較させます。Etagが同一であれば304 not modifiedを返し、異なれば200とデータを返します。ブラウザはサーバから304 not modifiedを受け取った場合、キャッシュデータを表示します。

PHPのheader関数でEtagを書き換える

通常であれば、ファイルが更新されればEtagも変更されるわけですが、出力方法などによっては稀に変更されない場合があるようです。そこで、EtagをPHPのheader関数で書き換えてやります。

header( 'Etag:' . time() );

上記コードをファイル先頭に記述しておけば1秒おきにEtagが更新され、キャッシュを読まないでサーバから読んでくれるようになるはずです。

関連記事

コメント

:
:
:
:
:
管理人のみ表示を許可