ページを送る際、Responseヘッダーに"Last-Modified"で時刻をつけると、 次回、アクセスする時に、ブラウザは"If-Modified-Since"でその時刻を返してくる。 ETagsより不正確なキャッシュのコントロール方法だが、かなりのサーバーで広く使えそうだ。 PHPでこれを、"Last-Modified"を使う問題点は、"If-Modified-Since"が返ってきた時、 Apacheがこれを、PHPファイル(server.php)の最終更新日時と比較して、server.phpが "If-Modified-Since"より古ければ、PHPを実行せずそのまま、304をブラウザに返して しまうのである。 比較したいのは、PHPファイル(server.php)の最終更新日時ではなく、PHPファイルが 送るデータファイルの最終更新日時なのであるが、そのように、Apacheに指示を出す方法はない。 解決策としては、"Last-Modified"で送る時刻は、データファイルの最終更新日時から 10年から40年を差し引いた古い時刻にしておく。そうすれば、"If-Modified-Since"が PHPファイル(server.php)の最終更新日時より古くなり、304をブラウザに返さず、 PHPを実行してくれる。 しかし、いくら10年から40年を差し引いたとしても、いつかは PHPファイル(server.php)の最終更新日時に追いついてしまう。 従って、時々、PHPファイル(server.php)を"touch()"して 最終更新日時を新しくする必要がある。