generated at
Cache-Control Header
HTTP/1.1で追加された
header種別: General header




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








Response Headerに指定できるdirectives
cacheに保存する条件を指定するもの
cacheの使われ方の指定
cacheの更新の方法を指定する
cacheの期限が切れた時に、どうするか?
cacheを使い続けるか?cacheを放棄するか?
放棄する場合、originがダウンしている時のことも考えているか?
データの取扱を指定する
defaultでは、ProxyやChromeのデータセーバーなどが、通信量の削減などのために、勝手にデータを弄ることがあるので、それを防ぐための指定
TTLを指定する


Request Headerに指定できるdirectives



参考
本に書いているのは基本的にresponse headerの話をしている







_
DirectiveRequestResponse
max-ageyesyes
max-staleyes
min-freshyes
no-cacheyesyes
no-storeyesyes
no-transformyesyes
only-if-cachedyes
must-revalidateyes
publicyes
privateyes
proxy-revalidateyes
s-maxageyes


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の内容によって変わるのか?







参考







たぶんここじゃない