Cache-Control について考える (3) : 補足集

投稿日:

前回の続編なので、まずはそちらから参照して欲しい。

記事を書いていく途中で、あまりにも補足点が増えて収集が付かなくなってしまったので、別ページに分けた。

no-store が効くタイミングについて

ブラウザが Cache-Control: no-store を受け取ったとしても、既に有効期間内のキャッシュが保存されている場合はそれが利用される。

no-store が意味を持つのは「キャッシュを生成するか否か」を判断するタイミングであり、既に保存されてしまったキャッシュを削除したり、利用を禁止したりすることはできない。また既にキャッシュを保存しているブラウザ上でリロードを行い、新たに Cache-Control: no-store を与えたとしても、キャッシュは有効期間だけ残り続ける。

上記の場合をあえて想定するなら、 Cache-Control: no-store, max-age=0 を指示するべきだ。

とはいえ、既にキャッシュを与えてしてしまった場合まで考えても仕方がないと思う。既にブラウザがキャッシュを持っている以上、エンドユーザが意図して Ctrl+R (場合によっては Shift+Ctrl+R)などの操作をしない限り、新たなヘッダを確認しに来ることはない。そうした操作をエンドユーザに指示できる環境だったら、そもそもキャッシュ消してもらえば良いだろう。

no-store が効かないCDNの存在について

有名な話だか、Fastly は no-store 付きコンテンツもキャッシュする。 代わりに private ディレクティブを利用しなければならない。

かつてのブラウザに対する public ディレクティブの必要性

Bugzilla に「Firefox 1.5 が public ディレクティブ付きのSSLコンテンツをキャッシュしない」という Bug がOpenされていた。

走り読みだが、この時代、SSL/TLSコンテンツは安全のためにキャッシュしないというのがデフォルトの挙動だったため、それらをキャッシュさせるヒントとして private ディレクティブを利用することが提案されているようだ。現代ではTLSコンテンツもデフォルトでキャッシュする。