キャッシュ系のHTTPヘッダー5種類の違い

とりあえずザックリ調べたことをメモ。(書いておかないと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(他にも色々ありすぎるので省略します😥😥😥)
  • Last-Modified:
    • Last-Modified
      →「このコンテンツの更新日は◯年◯月◯日◯秒だぜ!」な情報
    • If-Modified-Since
      →「このコンテンツの前回取得日は◯年◯月◯日◯秒だけど、キャッシュ使っていい?」な情報
  • ETag
    • ETag
      →「このコンテンツのEtagはこれだぜ!」な情報
    • If-None-Match
      →「このコンテンツを前回取得したときのEtagはこれだけど、キャッシュ使っていい?」な情報

みたいな感じ。

Expires、Pragma

後方互換のために残されてるだけらしい。

なので通常は、Cache-Controlを使っておけばOK。

Cache-Control

Cache-Controlはすごーーーーく奥が深いっぽいので、必要になったときにまた以下記事などで勉強しようと思います。

セキュリティ対策としての Cache-Control ヘッダについて – 理系学生日記

キャッシュについて整理 – Qiita

Last-Modified

これについては特に疑問はない。

ETag

ETagは

  • inode
  • ファイルサイズ
  • 最終更新日時

から、ハッシュ的な感じで生成するらしい。

なので「これら3つのうち、1つでも変化すればETagも変化する」という仕組み。

 

ただし、Apacheの場合はFileETagディレクティブを使えば「何からETagを生成するか」を変更できるみたいです。

例えば、FileETag MTimeと書けば、最終更新日時だけに依存するようになります。

 

とりあえず今日調べたことはそんな感じでした。

 

おわり

コメント

タイトルとURLをコピーしました