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

4 2 3 4.Age and Stale

Ageヘッダーフィールドは、キャッシュから取得した場合のレスポンスメッセージの推定経過時間を伝えるために使用される。Ageフィールド値は、レスポンスがオリジンサーバーによって生成または検証されてからの秒数に関するキャッシュの推定値である。本質的に、Age値は、レスポンスがオリジンサーバーからのパスに沿った各キャッシュに常駐していた時間の合計と、ネットワークパスに沿って転送中であった時間の量である。

次のデータが経過時間の計算に使用される:

age_value: 用語"age_value"は、算術演算に適した形式のAgeヘッダーフィールド(セクション5.1)の値を示す; 利用できない場合は0。

date_value: 用語"date_value"は、算術演算に適した形式のDateヘッダーフィールドの値を示す。Dateヘッダーフィールドの定義、およびそれを持たないレスポンスに関する要件については、[RFC7231] のセクション7.1.1.2を参照。

now: 用語"now"は「計算を実行しているホストでの時計の現在の値」を意味する。ホストは、NTP([RFC5905])または類似のプロトコルを使用して、時計を協定世界時に同期すべきである (ought to)。

request_time: 保存されたレスポンスをもたらしたリクエストが行われた時点でのホストでの時計の現在値。

response_time: レスポンスが受信された時点でのホストでの時計の現在値。

レスポンスの経過時間は、2つの完全に独立した方法で計算できる:

  1. "apparent_age"(見かけの経過時間): ローカル時計がオリジンサーバーの時計と合理的に同期している場合、response_timeからdate_valueを引いたもの。結果が負の場合、結果はゼロに置き換えられる。

  2. "corrected_age_value"(修正された経過時間値)、レスポンスパスに沿ったすべてのキャッシュがHTTP/1.1を実装している場合。キャッシュは、この値をレスポンスが受信された時刻ではなく、リクエストが開始された時刻を基準として解釈しなければならない (MUST)。

apparent_age = max(0, response_time - date_value);

response_delay = response_time - request_time;
corrected_age_value = age_value + response_delay;

これらは次のように結合される

corrected_initial_age = max(apparent_age, corrected_age_value);

キャッシュがAgeヘッダーフィールドの値に信頼を持っている場合(例えば、ViaヘッダーフィールドにHTTP/1.0ホップがないため)を除き、その場合、corrected_age_valueをcorrected_initial_ageとして使用してもよい (MAY)。

次に、保存されたレスポンスがオリジンサーバーによって最後に検証されてからの時間量(秒単位)をcorrected_initial_ageに追加することによって、保存されたレスポンスのcurrent_ageを計算できる。

resident_time = now - response_time;
current_age = corrected_initial_age + resident_time;