RFC2068 HTTP/1.1 1997年1月
13.2.3 期間計算
キャッシュされた入力がフレッシュであるかを知るためには、キャッシュがその期間が越えてないか、そのフレッシュライフタイムかどうかを知っている必要があります。私達は、13.2.4節の後半を算定するかどうか議論する;この節は、その期間のレスポンスまたはキャッシュ入力の期間をどのように算定するのか述べる。
この議論において、私たちが、「計算を実行するホストにおいての時刻の現在値」を意味している「now」を使用する。HTTPを使用するホスト、特に起源サーバーとキャッシュを運用するホストは、全体的に正確な時間標準へそれらの時間を同期させるためにNTP[28]あるいは同様のプロトコルを使用するべきである。
さらにHTTP/1.1がすべてのレスポンスを備えた日付ヘッダーを送り、かつレスポンスが生成された時を与えることを起源サーバーに要求することに注意せよ。私たちは、日付ヘッダーの値を表示するために演算オペレーションに適切な形式の中で、用語「date_value」を使用する。
HTTP/1.1は、キャッシュ間の時間情報を伝えることを助けるために、期限レスポンスヘッダーを使用する。そのレスポンスが起源サーバーにもたらされて、時間ヘッダー価値は時間の量の発送人を評価する。起源サーバーと再確認されたキャッシュが反応した場合には、期間価値は独創的な反応のでなく、再確認の時間に基づく。
本質的には、期間価値は、それがネットワーク・パスに沿って通過中だった時の量を加えて、反応が起源サーバーから、パスに沿った各キャッシュにおいて存在した時の合計である。
私たちは、期間ヘッダーの値を表示するために演算オペレーションに適切な形式の中で、用語「age_value」を使用する。
レスポンスの期間は2つの完全に独立した方法で計算することができる:
1.
ローカルの時計が起源サーバーの時計と合理的に上手に同期されている場合、現在のdate_valueを引き、結果が否定の場合、結果は0と取り替えられる。
2.
age_value、場合、かりにキャッシュは全てとしたら、レスポンス・パスHTTP/1.1に沿って実行される。
私たちは、それが受け取られる場合にレスポンスの期間を計算する2つの無所属派方法があるとすれば、これらを組み合わせることができるとして、
corrected_received_age = max(now
- date_value, age_value)
また、私たちどちらか近い方の同期した時刻または全てをもつくらい長い
Fielding,
et. Al 標準トラック [77ページ]
RFC
2068 HTTP/1.1 1997年1月
HTTP/1.1パス、一つは信頼できる(保守主義者)結果を得る。
パスに沿った各HTTP/1.1キャシュでこの修正が適用されることに注意しなさい。その結果、パスにHTTP/1.0キャッシュがある場合、受信キャッシュの時計が受け取ると同時に、正確な受信期間が計算される。私たちは端と端を接した時計同期(持っていることはよいが)を必要としない。また、明示的な時計同期ステップはない。
ネットワークに課された遅れのために、ある重要な間隔は時間からそれにサーバーを渡すかもしれません、反応および次の外国行きのキャッシュあるいはクライアントでそれが受け取られる時を発生する。未訂正の場合、この遅れは不適当に低い期間に結果が生じるかもしれない。
返された期間価値に帰着したリクエストがその期間価値の生成に先立って始められたに違いないので、私たちはリクエストが始められた時の記録によりネットワークによって課された遅れに応じて修正することができる。その後、期間価値が受信それMUSTである場合、解釈される、レスポンスが受け取られた時ではなくリクエストが始められた時に関連のある多くの遅れがどれほど経験を積んでも、このアルゴリズムは保守的な振る舞いに帰着する。したがって、私たちは次のものを計算する:
corrected_initial_age = corrected_received_age
+ (now -
request_time)
ので、生じたリクエスト、の中で、どこで「request_timeします」このレスポンスを誘い出したリクエストが送られた時(ローカルの時計による)です。
/*
*age_value
*期間の値です:このレスポンスを備えたキャッシュによって受け取られたヘッダー。
*date_value
*起源サーバーの日付の値です:ヘッダー
*request_time
*キャッシュが要求した(ローカル)時である。
*このリクエストの反応が生じる。
*response_time
*キャッシュが受け取った(ローカル)時である、その反応
*now
*流れ(ローカル)時間である。
*/
apparent_age = max(0, response_time - date_value);
Fielding, et. al. 標準トラック [78ページ]
RFC
2068 HTTP/1.1 1997年1月
corrected_received_age = max(apparent_age, age_value);
response_delay = response_time - request_time;
corrected_initial_age = corrected_received_age + response_delay;
resident_time = now - response_time;
current_age =
corrected_initial_age + resident_time;
キャッシュがレスポンスを送る場合、それはcorrected_initial_ageに応答がローカルの存在だった時の量を加えなければならない。その後、それは、次の受信キャッシュに、期間ヘッダーを使用して、この期間の合計を送信するに違いない。
クライアントのレスポンスが直接であるが確実に分からないことに注意しなければならない。しかし、期間ヘッダーの存在は、レスポンスが明確に直接ではないことを示す。さらに、レスポンスで日付がクライアントのローカルのリクエスト時間より早い場合、反応レスポンスは恐らく直接ではない。(重大な時刻がそれないために)