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コンテンツもデフォルトでキャッシュする。