Cache-Control Header
前提と概要
こんな感じで指定する
responseCache-Control: no-store
responseCache-Control: private, no-store, no-cache, must-revalidate
この private
とか no-store
とかがどういう意味?という話
defaultでも条件を満たしていればcacheされる
Cache-Control
hederは、cacheを防ぐために使用するという側面もある
しかし、CDNによってはその仕様を無視するものがある
例えば、defaultではcacheしないとか、 private
を付けたらcacheしないとか
直観(人による)と、HTTPの仕様と、CDNの実装にズレがあって難しい

Cache-Control
は、Resonse Header/Request Headerのいずれでも指定できる
ただし殆どの場合、Response Headerの話をしている
たまに、Request Headerでも指定するよ、という感覚で良さそう

Response Headerに指定できるdirectives
cacheに保存する条件を指定するもの
cacheの使われ方の指定
cacheの更新の方法を指定する
cacheの期限が切れた時に、どうするか?
cacheを使い続けるか?cacheを放棄するか?
放棄する場合、originがダウンしている時のことも考えているか?
データの取扱を指定する
defaultでは、Proxyや
Chromeのデータセーバーなどが、通信量の削減などのために、勝手にデータを弄ることがあるので、それを防ぐための指定
Request Headerに指定できるdirectives
参考
本に書いているのは基本的にresponse headerの話をしている
_Directive | Request | Response |
max-age | yes | yes |
max-stale | yes | |
min-fresh | yes | |
no-cache | yes | yes |
no-store | yes | yes |
no-transform | yes | yes |
only-if-cached | yes | |
must-revalidate | | yes |
public | | yes |
private | | yes |
proxy-revalidate | | yes |
s-maxage | | yes |
no-cacheとmust-revalidateを併用する意味
#??
cacheの期間指定
cacheの期限が切れた時にどうするか?
例えば、
revalidateするが、originがdownしていたのでcacheを使い続けた
revalidateするが、それが完了するまでは古いcacheを使用した (s-w-r)
revalidateした後に、更新がなかったのでcacheを使い続けた
指定した期間保存されるとは限らない
cacheにも容量がある
期間までに、それ以上のデータが入ってくれば、元々あったcacheは押し出されて消えることになる
期限が切れたからと言って、storageから消えるとは限らない
cacheのstorageには入れておいて、次来た時の為に残すこともある
実装に依る
誰が誰に対して指示をしていて、誰がcacheをして、cacheしていない時と比べて、どこが速くなっているのか
#??request headerのCache Control
client(broser?)が、Proxyに、対して言う
Cacheが有効な状況下で、
何もしていない場合は、ProxyはCacheを返す
no-cacheとかをreqで送れば、ProxyはCacheを更新する、感じ?
Proxyはreqからくるno-cacheは無視するので、指定してもほぼ無意味だということ?
この指定って意味ある?
コレとコレは併用することはありえない、というパターンがあれば例を見たい
max-ageとno-cacheは併用できない
max-ageとmust-revalidate/proxy-revalidatetは併用できる
指定する順番と意味
用語
age
cacheされ始めてからの経過時間
cacheされていない場合は、そもそもこの値は存在しない
revalidate
再検証
originに問い合わせること
cacheが最新か、古くなってないか
TTLが未定義な時は?
max-ageなどを一切指定いない時の動作
react-queryのcacheもresponse headerの内容によって変わるのか?
参考
たぶんここじゃない