ヒューリスティックキャッシュ メモ
Cache-Control や Expires などの明示的なキャッシュヘッダーがない場合に、ブラウザやキャッシュが応答を自動的にキャッシュする仕組み。RFC 9111 で規定されている。
計算式(10%ルール)
Last-Modified ヘッダーが存在する場合、次の式でキャッシュ有効期間を推定する。
キャッシュ有効期間 = (Date - Last-Modified) × 0.1
例:最終更新が 136 日前 → 約 13.6 日キャッシュされる
ブラウザごとの実装差異
| ブラウザ | 実装 |
|---|---|
| Chrome / Safari | 10%ルールをそのまま適用 |
| Firefox | 10%ルール と 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 を設定するのがベストプラクティス。