RFC 2616セクション 13.2.4によると:
13.2.4 有効期限の計算
応答が新しいか古いかを判断するには、応答の鮮度の有効期間と経過時間を比較する必要があります。年齢は
、セクション 13.2.3 で説明されているように計算されます。
このセクションでは、鮮度の有効期間を計算する方法と、応答の有効期限が切れているかどうかを判断する方法について説明します。
以下の説明では、値は算術演算に適し
た任意の形式で表すことができます。
「expires_value」という用語を使用して、Expires
ヘッダーの値を示します。「max_age_value」という用語を使用して、応答の Cache-Control ヘッダーの「max-age」ディレクティブによって運ばれる秒数の適切な値を示します (セクション 14.9.3 を参照)。
max-age ディレクティブは Expires よりも優先されるため、応答に max-age が含まれている場合、計算は次のようになります。
freshness_lifetime = max_age_value
それ以外の場合、Expires が応答に存在する場合、計算は次のようになります。
freshness_lifetime = expires_value - date_value
すべての情報は元のサーバーから取得されるため、これらの計算はどちらもクロック スキューに対して脆弱ではないことに注意してください。
Expires、Cache-Control: max-age、または Cache-Control: s-
maxage (セクション 14.9.3 を参照) のいずれも応答に表示されず、応答にキャッシュに関する他の制限が含まれていない場合、キャッシュは鮮度を計算してもよい (MAY)。ヒューリスティックを使用したライフタイム。そのような警告がまだ追加されていない場合、キャッシュは経過時間が 24 時間以上の応答に警告 113 を添付する必要があります。
また、応答に Last-Modified 時刻がある場合、ヒューリスティック
有効期限の値は、その時刻からの間隔の一部を超えてはなりません (SHOULD)
。この割合の典型的な設定は 10% かもしれません。
応答の有効期限が切れているかどうかを判断する計算は非常に
簡単です。
response_is_fresh = (freshness_lifetime > current_age)