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

とりあえずザックリ調べたことをメモ。(書いておかないと100%忘れそうなので・・・)

 

キャッシュ関係のHTTPヘッダーには、以下の5つがあります。

レスポンスヘッダーリクエストヘッダー
問答無用でキャッシュを使う系Expires×
×Pragma
いろいろできる系Cache-Control
確認してからキャッシュを使う系Last-ModifiedIf-Modified-Since
ETagIf-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と書けば、最終更新日時だけに依存するようになります。

 

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

 

おわり

HTML/CSS/JavaScript
スポンサーリンク
この記事を書いた人
penpen

1991生まれ。
2019年くらいからフロントエンドエンジニアを目指している元アフィリエイターです💩

penpenをフォローする
penpenをフォローする
penpenメモ

コメント

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