RFC8246 Cache-Control: immutableについて

追記 20170915
RFC8246として標準化されました


こちらの記事で紹介されている、"Cache-Control: immutable"について試してみる
https://bitsup.blogspot.jp/2016/05/cache-control-immutable.html?m=1

Cache-Control: immutable

基本的にブラウザは、画像などのリソースをキャッシュします。
ページ遷移などで移動した際、再度その画像を取得する場合はcache-controlの条件内であればキャッシュを利用します。


しかし、リロードボタンを押すとConditional GETと呼ばれるif-modified-sinceヘッダなどが付いたリクエストを送信し、リソースが更新されていないか確認しに行きます。304 Not Modifiedが帰ってきた場合は無事キャッシュを使用することが出来ます。(スーパーリロードの場合は通常のHTTPリクエストになります)


Cache-Control: immutable は、このリロード時もcache-controlの条件内であればサーバに確認せずにキャッシュを利用できるようにする仕組みのようです。RFC7234のCache Control Extensionsではcache-controlヘッダの拡張が許可されており、対応してないクライアントは無視するように指定されています。

試す

Firefoxソースコードを見るとimmutableに関するコードが入ってそうなので、試してみた。


画像を2つ用意し、片方にはimmutableをつけてリロードボタンを押す
( https://asnokaze.com/demo/cache-control-immutable.html )



こんな感じで、片方の画像は304だが、もう片方はキャッシュから読み込んでるのが分かる。

余談

chromiumのnet-devグループでも「Cache-Control: immutable」の話題が出ている。
https://groups.google.com/a/chromium.org/forum/?utm_medium=email&utm_source=footer#!topic/net-dev/rGNMUJFQ0Q4


その中で、chromiumの様々な種類のリロードに関してまとまった資料が大変興味深かった
https://docs.google.com/document/d/1vwx8WiUASKyC2I-j2smNhaJaQQhcWREh7PC3HiIAQCo/edit