とりあえずザックリ調べたことをメモ。(書いておかないと100%忘れそうなので・・・)
キャッシュ関係のHTTPヘッダーには、以下の5つがあります。
| レスポンスヘッダー | リクエストヘッダー | |
|---|---|---|
| 問答無用でキャッシュを使う系 | Expires | × | 
| × | Pragma | |
| いろいろできる系 | Cache-Control | |
| 確認してからキャッシュを使う系 | Last-Modified | If-Modified-Since | 
| ETag | If-None-Match | |
例えば、a.jpgという画像を例にすると
- Expires:
- 「a.jpgの期限は◯年◯月◯日◯秒までだぜ!」な情報(後方互換のために残されてる)
 
- Pragma:
- 「a.jpgを送るときは必ずオリジンサーバーに確認を取りなさい!」な情報(後方互換のために残されてる)
 
- Cache-Control:
- no-store :
 →「結果を一切キャッシュするな!」な情報
- no-cache :
 →「OKをもらわない限りキャッシュを使うな!」な情報
- max-age:
 →「a.jpgの期限は◯◯秒後までだぜ!」または「a.jpgの期限は◯年◯月◯日◯秒までだぜ!」な情報
 ・・・etc(他にも色々ありすぎるので省略します😥😥😥)
 
- no-store :
- Last-Modified:
- Last-Modified:
 →「このコンテンツの更新日は◯年◯月◯日◯秒だぜ!」な情報
- If-Modified-Since:
 →「このコンテンツの前回取得日は◯年◯月◯日◯秒だけど、キャッシュ使っていい?」な情報
 
- Last-Modified:
- ETag:
- ETag:
 →「このコンテンツのEtagはこれだぜ!」な情報
- If-None-Match:
 →「このコンテンツを前回取得したときのEtagはこれだけど、キャッシュ使っていい?」な情報
 
- ETag:
みたいな感じ。
Expires、Pragma
後方互換のために残されてるだけらしい。
なので通常は、Cache-Controlを使っておけばOK。
Cache-Control
Cache-Controlはすごーーーーく奥が深いっぽいので、必要になったときにまた以下記事などで勉強しようと思います。
セキュリティ対策としての Cache-Control ヘッダについて – 理系学生日記
Last-Modified
これについては特に疑問はない。
ETag
ETagは
- inode
- ファイルサイズ
- 最終更新日時
から、ハッシュ的な感じで生成するらしい。
なので「これら3つのうち、1つでも変化すればETagも変化する」という仕組み。
ただし、Apacheの場合はFileETagディレクティブを使えば「何からETagを生成するか」を変更できるみたいです。
例えば、FileETag MTimeと書けば、最終更新日時だけに依存するようになります。
とりあえず今日調べたことはそんな感じでした。
おわり
 
  
  
  
  
コメント