Expires Inspect
キャッシュ関連ヘッダーを横断して判定します。入力はサーバーへ送信しません。再検証やCDN差分の一次切り分けに使えます。
状態
ブラウザ内で処理します。入力はサーバーへ送信しません。まずはここで一次切り分けしてください。
使い方
Expires(必要ならDateも)を貼り付けて「解析」。日時と「期限切れかどうか」の判定を表示します(ヘッダー行/複数行貼り付けOK、レスポンスヘッダー全体でもOK)。
注意(このツール)
- 実際のキャッシュ挙動は Cache-Control が優先されることが多いので、Cache-Control Inspect も併用してください。
このページについて
何をするツール?
Expires / Date を解析して、期限切れ時刻(staleになる時刻)を読みやすく表示します。両方貼ると、Expires が Date より未来か/過去かも判定します。
「キャッシュが効かない」「効きすぎる」「いつまで古いまま?」といった問題の切り分けに向きます。
Expiresの基本
- Expires は「このレスポンスの有効期限(日時)」を示します。
- Date は「レスポンスが生成された時刻」を示します。
- Expires が Date より過去なら、そのレスポンスはすでに期限切れ(stale)です。
Cache-Controlとの関係(最重要)
実務では Cache-Control が優先される場面が多く、Expires だけ見ても判断できないことがあります。まず Cache-Control の方針(max-age/no-store/no-cache 等)を確認してから Expires を見ます。
- max-age がある:相対期限(秒)で管理されるため、Expiresは補助的になる
- no-cache:期限の有無に関わらず再検証が必要になりやすい
- no-store:保存されないため Expires を見ても意味が薄い
構文(日時の形式)
Expires は HTTP-date で指定されます。実務では IMF-fixdate がほぼ使われます(例: Wed, 21 Oct 2015 07:28:00 GMT)。
- Expires: Wed, 21 Oct 2015 07:28:00 GMT
- Date: Wed, 21 Oct 2015 07:00:00 GMT
用語(このページの前提)
- Fresh / Stale: キャッシュが期限内(fresh)か期限切れ(stale)か。
- Shared cache: CDN/プロキシのような共有キャッシュ。
- Revalidation(再検証): stale なキャッシュを使う前に確認する動作。
例(よくあるパターン)
- Expires が過去: Expires: 0 / 既に過去日時 → 「基本はキャッシュさせない」意図
- Expires が未来: 期限までは fresh になり得る(ただし Cache-Control 次第)
- Date が無い: 実務ではDateもあるのが一般的だが、環境により欠けることもある
なぜ Date と一緒に見る?(時計ズレの検出)
Expires は絶対日時なので、サーバーやCDNの時刻がズレていると、意図と違う「過去/未来」に見えることがあります。Date と並べるとズレに気づきやすくなります。
- Expires < Date:そもそも既に期限切れ(stale)扱いになりやすい
- Expires が不自然に遠い未来:ヘッダー付け替え/バグ/意図しない設定の可能性
よくある落とし穴
- Cache-Control と Expires が矛盾していて判断を誤る(max-age優先など)
- サーバー時刻のズレで Expires が過去/未来に見える
- CDNがヘッダーを付け替える/追加する(オリジンと一致しない)
CDN/プロキシ配下で起きがちなこと
CDNはオリジンの Expires/Cache-Control をそのまま通すとは限りません。キャッシュルールで上書きされたり、追加ヘッダーとして付与されることがあります。
- オリジンとエッジで Expires が違う:CDNのキャッシュポリシーを確認
- Vary やキャッシュキーの設計次第で「古いものが混ざる」こともある
確認のしかた(curlでExpires/Dateを見る)
まずはヘッダーだけ取得して Expires/Date/Cache-Control を確認します(URLは置き換えてください)。
- 取得: curl -I https://example.com/asset.js
- CDN経由/直オリジンで差がある場合は、両方のヘッダーを比較する
Expires を単体で見るのではなく、Cache-Control(max-age/no-cache/no-store)とセットで解釈します。
トラブル別チェックリスト
- キャッシュが効かない: Expires が過去 / Vary: * / no-cache/no-store / CDNのバイパス設定を確認
- 効きすぎて更新されない: Expires が遠い未来 / max-ageが大きい / immutable / ファイル名にhashが無い等を確認
- 期限が変に見える: Date と比較して時計ズレ(サーバー/CDN)を疑う
切り分け手順(おすすめ)
- Response Headers Parser にレスポンスヘッダーを貼り、Cache-Control/Expires/Date を確認
- このツールで Expires/Date を解析して「過去か未来か」を整理
- ETag/Last-Modified も確認し、stale時の再検証が成立するかを見る
関連ツール
- Cache-Control Inspect
- ETag Inspect
- Last-Modified Inspect
- Response Headers Parser
- Vary Inspect
推奨(用途別)
- 基本は Cache-Control を優先し、Expires は補助にする
- HTML は短め Expires + validators が安全
- 静的アセットは長期 Expires + versioned URL
このツールでできること
- Expires / Date の日時解析(UTC/GMT)
- Expires が Date より未来/過去か判定
- レスポンスヘッダー全体から Expires/Date を抽出
注意(運用)
- キャッシュ挙動はブラウザ/CDN/プロキシの層で変わるため、同一点観測で比較してください。
- ヘッダー診断だけでは不十分な場合があります。アプリ側の更新戦略とキー設計も確認してください。
参照仕様
- RFC 9110(HTTP Semantics)
- RFC 9111(HTTP Caching)
- MDN: Expires / Date
FAQ
Expires と max-age はどっちが優先?
実務では max-age(Cache-Control)が優先されることが多いです。Expires は後方互換や補助として使われます。
Expires: 0 はどう扱う?
環境によって解釈が異なる可能性があるため、明示的に Cache-Control を使う設計の方が安全です。
Date が無い/変なのは問題?
Date が無い/不正だと、Expires との比較や時計ズレ検出が難しくなります。まずはレスポンスの生成系(アプリ/プロキシ/CDN)のどこでヘッダーが付与されているかを確認してください。
参考リンク
次に見る(診断順)
site_map ルールに基づいて、次に確認すべきページを表示しています。
- Age Inspect — Age を解析して共有キャッシュ滞在時間を把握
- Last-Modified Inspect — Last-Modified / If-Modified-Since を解析
- If-Modified-Since Inspect — If-Modified-Since を解析して条件付き取得を確認
- Vary Inspect — Vary を解析してキャッシュ分岐条件を可視化
- Cache Not Working Troubleshooting — キャッシュが効かない症状をヘッダーから段階的に切り分け
- HTTP Cache Mismatch — キャッシュ不一致の原因候補を特定
- Cache Response Analyzer — レスポンスヘッダーからキャッシュ可否を判定
- Cache Key Inspect — URL/Vary/ヘッダーからキャッシュキー分岐を可視化
同テーマの導線
キャッシュ制御
Cache-Control/Expires/Age を横断して配信ポリシーを診断
- Cache Not Working Troubleshooting — キャッシュが効かない症状をヘッダーから段階的に切り分け
- HTTP Cache Mismatch — キャッシュ不一致の原因候補を特定
- Cache Response Analyzer — レスポンスヘッダーからキャッシュ可否を判定
- Cache Key Inspect — URL/Vary/ヘッダーからキャッシュキー分岐を可視化
- Cache Diagnostic — キャッシュ関連ヘッダーを横断診断
- キャッシュ制御まとめ — Cache-Control/Pragma/Expires の使い分けを整理
- Cache-Control Inspect — Cache-Control ディレクティブを分解・解釈
- Pragma Cache Inspect — Pragma を解析して旧キャッシュ制御を確認
- Age Inspect — Age を解析して共有キャッシュ滞在時間を把握