画像配信のCache-ControlとCDN無効化 2025 — 早く・壊さず・確実に刷新
公開: 2025年9月23日 · 読了目安: 3 分 · 著者: Unified Image Tools 編集部
TL;DR
- ファイル名バージョニングが最強。CDNパージは最終手段に
immutable
+ 長寿命 or 短命 + SWR のいずれかで方針統一- 変わるHTML・変わらない画像の役割分担を明確に
内部リンク: INP中心の画像配信最適化 2025 — decode/priority/スクリプト協調で体感を守る, 2025年のレスポンシブ画像設計 — srcset/sizes 実践ガイド, P3 画像配信ガイド 2025 — sRGB フォールバックと実機確認の手順, CDNエッジリサイズの落とし穴 2025 — アップスケール/キャッシュ/画質の三角形
キャッシュモデル(3つの型)
-
immutable 長寿命 + バージョニング(推奨)
Cache-Control: public, max-age=31536000, immutable
- 変更はファイル名ハッシュで表現(例
logo.abcd1234.png
) - CDNパージは事故時のみ。HTMLから新URLへ参照を更新
-
短命 + stale-while-revalidate(SWR)
Cache-Control: public, max-age=60, stale-while-revalidate=86400
- 初回は即時提供、裏で更新。ニュース系や頻繁に更新されるサムネに適合
-
検証型(ETag/Last-Modified 中心)
- 更新頻度は低いがバージョニングが難しい場合に限定。
304
多用はヘッダ往復がコスト
- 更新頻度は低いがバージョニングが難しい場合に限定。
実装ポイント
Cache-Control: public, max-age=31536000, immutable
+ ファイル名ハッシュ- SWRは初回即時描画/裏で更新が適合する静的画像で
ETag/Last-Modified の使い分け:
- immutable運用では原則不要(URLが変われば常に新鮮)
- SWR/短命では帯域節約のため ETag を併用可。ただし生成コスト/分散の整合を考慮
バージョニング戦略
- コンテンツアドレス(ハッシュ)でURLを不変化 → CDNのパージ頻度を最小化
- 変わるHTMLと変わらない画像の役割分担を明確化
- フォーマット交渉は
Vary: Accept
のみに限定し、DPRはURLパラメータで
ハッシュの粒度
- 全画像共通のビルドIDではなく、ファイル単位の内容ハッシュを推奨(誤パージ/過剰無効化を防止)
- 動的変換(リサイズ/フォーマット)を行う場合は、リクエストパラメータ(w, q, fmt, dpr)を順序規範化してキャッシュキーに含める
体系的なパージ
- エンティティごとのサロゲートキーを採用し、変更時はマニフェストで一括指定
- パージ後はバックグラウンドでウォームアップ(代表サイズを先読み)
サロゲートキー例
sk:article:12345
(記事IDに紐づく全サムネ)sk:logo
(ブランドロゴ全サイズ)- マニフェスト:
article:12345 -> [/thumbs/a1.., /thumbs/a2..]
ウォームアップ
- 人気ルートの代表幅(例 320/480/640/960)を事前取得
- エッジ変換の場合は
noUpscale
と丸め(バリアント数の制限)でキャッシュ効率を最大化(関連記事: CDNエッジリサイズの落とし穴 2025 — アップスケール/キャッシュ/画質の三角形)
失敗しやすいポイント
- HTML は更新したが、古い URL をどこかが参照→ キャッシュ残存。検索/置換の自動化 + パージの冪等実行
- 変換URLのパラメータ順序がバラバラ → キャッシュ断片化。サーバ側で正規化
Vary
を増やしすぎる → キャッシュ効果が消失。Accept
のみで十分、DPR は URL へ
FAQ(運用判断)
- Q. すべて immutable にすべき?
- A. ほとんどの静的画像は YES。頻繁に更新するサムネ/動的生成は SWR + 短命も有効
- Q. CDN のパージが遅い/効かない
- A. サロゲートキー運用とウォームアップを組み合わせる。最悪ケースはファイル名変更で確実に切替
- Q. 画像CDNで『自動変換』を使うとキャッシュキーが肥大化
- A. 許可パラメータを限定し丸める。
w
は固定バケット、q
はプリセットのみに
- A. 許可パラメータを限定し丸める。
チェックリスト
- [ ] 不変URL/バージョン付与を徹底
- [ ] パージはマニフェスト駆動、手動都度は最小化
- [ ] ウォーマー/監視が稼働
追加チェック:
- [ ] 変換パラメータの正規化(順序/範囲/丸め)
- [ ]
Vary
はAccept
のみに固定、DPR は URL に - [ ] ハッシュは内容ベース、共通ビルドIDは避ける