ChromeとSafariで"Cache-Control: no-cache"が効かなかった


Webページのキャッシュを残さないようにしたとき四苦八苦したので備忘録として書いてきます。

とりあえず問題としては2種類あった。

問題1

ブラウザバック時に問題があったのでキャッシュを残さないようにしようとした。

最初は下記の通りにPHP側で設定してた。

cache.php
<?php
header("Cache-Control: no-cache");
header("Pragma: no-cache");

これだとChromeとSafariでは残るらしく、ブラウザバックでキャッシュからページを表示していた。なので、ググってみたところ下記のようにヘッダーを設定すればいいよという内容を見つけたので修正。

cache.php
<?php
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

で、ChromeとSafariで確認するとちゃんとキャッシュが残らないようになっていた。

問題2

問題1の対応をした後、iOS7のSafari7で確認するとページがキャッシュを使って表示されていた。

原因としては過去のキャッシュが残っていただけだったのだが、それに気づくのに小一時間ほどかかった。。。

どうもURLをキーにしてキャッシュを取り出しているのか、キャッシュを残さないようにしても過去のキャッシュが残っていればそれを使ってページを表示するっぽい。