ヒューリスティックキャッシュ メモ

Cache-ControlExpires などの明示的なキャッシュヘッダーがない場合に、ブラウザやキャッシュが応答を自動的にキャッシュする仕組み。RFC 9111 で規定されている。

計算式(10%ルール)

Last-Modified ヘッダーが存在する場合、次の式でキャッシュ有効期間を推定する。

キャッシュ有効期間 = (Date - Last-Modified) × 0.1

例:最終更新が 136 日前 → 約 13.6 日キャッシュされる

ブラウザごとの実装差異

ブラウザ実装
Chrome / Safari10%ルールをそのまま適用
Firefox10%ルール と 1週間 の短い方を採用

問題になるケース

  • バージョン管理なしの CSS/JS(bundle.js など)が数日〜数週間キャッシュされ、バグ修正が反映されない
  • HTML ページに Cache-Control がないと、古いコンテンツが長期間表示され続ける
  • 1 年以上未更新のファイルは約 36 日間キャッシュされる

対策

明示的に Cache-Control を指定することでヒューリスティックキャッシュを回避できる。

# HTML などの動的コンテンツ:毎回検証を強制
Cache-Control: no-cache

# ハッシュ付き静的リソース:長期キャッシュ
Cache-Control: public, max-age=31536000, immutable

# センシティブなデータ:キャッシュ禁止
Cache-Control: no-store

まとめ

ヒューリスティックキャッシュはブラウザ実装が統一されておらず、動作が予測しにくい。現代の Web 開発ではすべてのレスポンスに明示的な Cache-Control を設定するのがベストプラクティス。