メインコンテンツまでスキップ

4.2.1. Calculating Freshness Lifetime (鮮度有効期間の計算)

キャッシュは、以下の最初の一致を使用して、レスポンスの鮮度有効期間(freshness_lifetimeと表記)を計算できる:

  • キャッシュが共有されており、s-maxageレスポンスディレクティブ(セクション5.2.2.9)が存在する場合、その値を使用する、または
  • max-ageレスポンスディレクティブ(セクション5.2.2.8)が存在する場合、その値を使用する、または
  • Expiresレスポンスヘッダーフィールド(セクション5.3)が存在する場合、その値からDateレスポンスヘッダーフィールドの値を引いた値を使用する、または
  • それ以外の場合、レスポンスに明示的な有効期限が存在しない。ヒューリスティック鮮度有効期間が適用される可能性がある; セクション4.2.2を参照。

この計算は、すべての情報がオリジンサーバーから来るため、時計のずれに対して脆弱ではないことに注意すること。

特定のディレクティブに複数の値が存在する場合(例えば、2つのExpiresヘッダーフィールド、複数のCache-Control: max-ageディレクティブ)、そのディレクティブの値は無効と見なされる。無効な鮮度情報を持つレスポンスを古いものと見なすことが推奨される。


4.2.2. Calculating Heuristic Freshness (ヒューリスティック鮮度の計算)

オリジンサーバーが常に明示的な有効期限を提供するわけではないため、明示的な時間が指定されていない場合、キャッシュはヒューリスティック有効期限を割り当ててもよく (MAY)、他のヘッダーフィールド値(Last-Modified時刻など)を使用して妥当な有効期限を推定するアルゴリズムを使用する。この仕様では特定のアルゴリズムは提供されないが、その結果に対する最悪ケースの制約が課される。

保存されたレスポンスに明示的な有効期限が存在する場合、キャッシュはヒューリスティックを使用して鮮度を判断してはならない (MUST NOT)。セクション3の要件により、これは実質的に、ヒューリスティックは、ステータスコードがデフォルトでキャッシュ可能として定義されている明示的な鮮度のないレスポンス([RFC7231] のセクション6.1参照)、および明示的にキャッシュ可能としてマークされている明示的な鮮度のないレスポンス(例えば、"public"レスポンスディレクティブ付き)にのみ使用できることを意味する。

レスポンスにLast-Modifiedヘッダーフィールド([RFC7232] のセクション2.2)がある場合、キャッシュは、その時刻からの間隔のある割合以下のヒューリスティック有効期限値を使用することが推奨される。この割合の典型的な設定は10%である可能性がある。

ヒューリスティックを使用して鮮度有効期間を計算する場合、current_ageが24時間を超えており、そのような警告がまだ存在しない場合、キャッシュはレスポンス内に113 warn-code(セクション5.5.4参照)を含むWarningヘッダーフィールドを生成すべきである (SHOULD)。

注: [RFC2616] のセクション13.9は、クエリコンポーネントを持つURI(つまり、'?'を含むもの)に対してキャッシュがヒューリスティック鮮度を計算することを禁止していた。実際には、これは広く実装されていない。したがって、キャッシュを妨げたい場合は、オリジンサーバーに明示的なディレクティブ(例えば、Cache-Control: no-cache)を送信することが推奨される。