S eda1a14b50ee24bcab19b62f40858e76 Cache-Control

ブラウザにキャッシュ方法を指示する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ならどんなサイトでもフォームの情報は消えることがないので、困ってる人は使って下さい。

もしかして

    他の人の「Cache-Control」

    S eda1a14b50ee24bcab19b62f40858e76

    無所属ソフトウェアエンジニア

    (1722words)

    最新

      最新エントリ

        関連ツイート