とりあえずザックリ調べたことをメモ。(書いておかないと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
と書けば、最終更新日時だけに依存するようになります。
とりあえず今日調べたことはそんな感じでした。
おわり
コメント