ブラウザにキャッシュ方法を指示するHTTPヘッダだが、よくわからない…。
詳しいまとめ。
http://www.ibm.com/developerworks/jp/web/l...
どうやらこの4つは設定によって更新タイミングが変わるらしい。
・URLの直打ち
・リロード
・リンク
・戻る
URLの直打ちや戻るでは更新せず、フォームをsubmitした時には更新が行われるのが理想…。
PHP
session_start()を使うと自動で色んなヘッダ書き出してくる。デフォルトではno-cache。全くキャッシュが有効にならない。ヘッダを変更するには、session_startする前に、session_cache_limiter()する必要がある。
private_no_expire, max-age
自力で調べた結果、これが一番良い気がする。IEはまだ見てない。
フォームの入力が戻った時にも保持され、更新直後のキャッシュは残らない。
session_cache_limiter('private_no_expire, max-age=0');
If-Modified-Sinceのみ。ExpiresもCache-ControlもLast-modifiedも出力されない。
でも何故かうまく動作する。
If-Modified-Since: Sat, 20 Feb 2010 16:24:36 GMT
private_no_expire
session_cache_limiter('private_no_expire');
Cache-ControlとLast-Modifiedが出力
この方法が良いという記述をよく見かけた。確かにフォームのキャッシュは有効になるが、更新後にキャッシュがクリアされずに残る問題がある
Cache-Control: private, max-age=10800, pre-check=10800
Last-Modified: Sat, 20 Feb 2010 16:24:36 GMT
private
session_cache_limiter('private');
Expires、Cache-Control、Last-Modifiedが出力
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: private, max-age=10800, pre-check=10800
Last-Modified: Sat, 20 Feb 2010 16:24:36 GMT
public
privateはプロキシサーバーでのキャッシュを無効し、publicは有効にする、と聞いたことがある。
session_cache_limiter('public');
If-Modified-Since、Expires、Cache-Control、Last-Modifiedが出力
If-Modified-Since: Sat, 20 Feb 2010 16:24:36 GMT
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: public, max-age=10800
Last-Modified: Sat, 20 Feb 2010 16:24:36 GMT
private_no_expire, must-validate, max-age
session_cache_limiter('private_no_expire, must-validate, max-age=0');
If-Modified-SinceもExpiresもCache-ControlもLast-modifiedも出力されない。
no-cache
何も指定せずにsession_startを呼び出した場合。
If-Modified-Sinceはなく、no-cacheが付く。必ず更新する。
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
他のサイトはどうなってるか?
Firefox3.5.8で確認。
mixi
mixiはすべてno-cacheになってる。でも何故かフォームは保持してる。
HTMLで指定してるわけでもないし、JavaScriptも使っていない。どうやってるのか謎。
と思ったら、ホームなどはno-cacheだが、日記作成のところだけレスポンスコードの前にCache-Control: max-age=0が付加されていた。
Cache-Control: max-age=0
HTTP/1.1 200 OK
...
Cache-Control: no-cache
Pragma: no-cache
OpenPNE3
やはりmixiと同じで日記作成のところで Cache-Control: max-age=0 している。
アメブロ
戻ったら消えました
lang-8
Cache-Control: max-age=0
...
Cache-Control: private, max-age=0, must-revalidate
他のサイトとは逆で、日記を書くには最初のmax-ageはなかった。でも正しく動いているみたい。
はてなダイアリー
特にキャッシュ関係のヘッダはなし。
しかし、何故かタイトルを残して本文が消えました。
JavaScriptも関係している?
Livedoor Blog
ブログを書くで戻って進んでも残っている。
ブログを書くのみmax-ageが付加。
Cache-Control: max-age=0
Pragma: no-cache
Cache-Control: private
twitter
戻って進んだら消えました
Pragma: no-cache
Cache-Control: no-cache, no-store, must-revalidate, pre-check=0, post-check=0
Expires: Tue, 31 Mar 1981 05:00:00 GMT
最後に一言
Operaならどんなサイトでもフォームの情報は消えることがないので、困ってる人は使って下さい。