HTTPキャッシュ有効期限計算

応答ヘッダーを入力して、キャッシュが「新鮮」でいられる期間(鮮度有効期間)と、経過した時間(現在の Age)、残りの鮮度を求めます。

キャッシュの種類
秒
鮮度の判定(確認する日時のとき) —
鮮度有効期間(応答が新鮮でいられる長さ。時間が経っても変わりません)
鮮度有効期間—
採用した指示—
現在の Age(応答が作られてから経過した時間。時間が経つと増えます)
現在の Age—
 見かけの Age(受け取った日時 − Date)—
 Age ヘッダーの値—
 受け取った時点の Age(上の 2 つの大きいほう)—
 受け取ってから経過した時間—
残りの鮮度
残りの鮮度(鮮度有効期間 − 現在の Age)—
期限が切れる日時—

    RFC 9111 にもとづく計算です。実際のブラウザや CDN の挙動は、規格どおりとは限りません。応答の遅延は 0 として計算します。

    このツールが計算するもの

    HTTP のキャッシュ(ブラウザや CDN などが応答を保存して再利用する仕組み)の規格 RFC 9111 のうち、鮮度(freshness)の計算だけを扱います。応答を保存してから、検証せずに再利用してよいかどうかを決める部分です。検証(ETag・If-Modified-Since・304)、Vary、リクエスト側の Cache-Control は扱いません。

    鮮度有効期間と現在の Age の違い

    鮮度有効期間の優先順位

    RFC 9111 の 4.2.1 にもとづき、次の順に最初に見つかったものを使います。

    順 共有キャッシュ(CDN・プロキシ) プライベートキャッシュ(ブラウザ)
    1 s-maxage (s-maxage は使いません)
    2 max-age max-age
    3 Expires − Date Expires − Date
    4 どれもなければ、明示的な有効期限なし 同左

    現在の Age の計算

    RFC 9111 の 4.2.3 の式を使います。

    このツールは、リクエストを送った時刻を入力しないため、応答の遅延(リクエストを送ってから応答を受け取るまでの時間)を 0 として計算します。 遅延が大きい通信では、実際の現在の Age より小さく計算されることがあります。RFC は、Age ヘッダーの値に遅延を足した値だけを使ってもよいとしています。

    入力のきまり

    Cache-Control のほかの指示

    計算には使いませんが、再利用についての注意として表示します。

    計算例

    入力 結果
    max-age=3600、Age なし、受け取ってから 1,800 秒後 鮮度有効期間 3,600 秒、現在の Age 1,800 秒、残り 1,800 秒(新鮮)
    同じ条件で、ちょうど 3,600 秒後 現在の Age 3,600 秒。鮮度有効期間と等しいので、古い
    max-age=3600、Age=600、受け取った直後 現在の Age 600 秒、残り 3,000 秒
    共有キャッシュで s-maxage=60, max-age=3600 鮮度有効期間 60 秒(max-age は無視)

    注意点

    よくある質問

    max-age と Expires の両方があるとどうなりますか?

    max-age があると、Expires は無視されます(RFC 9111 の 5.3)。

    s-maxage はブラウザにも効きますか?

    s-maxage は共有キャッシュ用の指示です。プライベートキャッシュ(ブラウザ)では使いません。

    Age ヘッダーとは何ですか?

    応答が、送信元で作られたり再検証されたりしてから経過した秒数を、途中のキャッシュが書き込む値です。このツールでは、現在の Age の計算に使います。

    時刻を調べるには?

    UNIX 時間・日時変換や、Cron 式・次回実行日時計算も使えます。