

HTTP 1.1の勉強をしています。キャッシュのところでどうしても理解できないところがあります。

corrected_initial_ageが理解できません。

[code]

      apparent_age = max(0, response_time - date_value);
      corrected_received_age = max(apparent_age, age_value);
      response_delay = response_time - request_time;
      corrected_initial_age = corrected_received_age + response_delay;
    
[/code]

そもそも、response_delayでresponse_time -
request_timeで全体の経過時間を計算しているのに、そこにさらにcorrected_received_ageを加えていますが、なぜでしょうか？

例えば以下の場合：

User <-> Cache A <-> Origin Server

とあった場合、例えばCache Aでのcorrected_initial_ageを求めると  
Cache Aでのresponse_timeからCache
Aからのrequest_timeの差分を求めた時点で、requestを発行してからresponseを取得するまでの時間が取得できます。  
そこに、corrected_received_age、つまりCache Aでのreponse_timeからOrigin
Serverがそのresponseを作成した時間をひいたもの、を加えると、余計なことやっているように見えます。

私の理解が間違っているとは思いますが、数式からこのcorected_initial_ageが何を意味しているのかがよく分かりません。

どんなたか分かる方いらっしゃいますでしょうか？


CC BY-SA 4.0
2018-11-01T14:37:23.707
49868
2018-11-02T06:04:31.000
27033
question
http
HTTP 1.1 corrected_initial_ageに関して


最初に、Hypertext Transfer Protocol -- HTTP/1.1 [Request for Comments: 2068] の
"13.2.3 Age Calculations"の節から、該当部分を引用します。

> Summary of age calculation algorithm, when a cache receives a  
>  response:  
>  /*  
>  * age_value  
>  * is the value of Age: header received by the cache with  
>  * this response.  
>  * date_value  
>  * is the value of the origin server's Date: header  
>  * request_time  
>  * is the (local) time when the cache made the request  
>  * that resulted in this cached response  
>  * response_time  
>  * is the (local) time when the cache received the  
>  * response  
>  * now  
>  * is the current (local) time  
>  */  
>  apparent_age = max(0, response_time - date_value);  
>  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;

経過時間に関係するデータとして、サーバの時計で記録した送信時間(date_value)と、経過時間値(age_value)があります。  
クライアントの時計とサーバの時計があまりズレていなければ、受信時間(response_time)-送信時間(date_value)で経過時間が求まりますが、時計がずれていると(サーバの時計が進んでいると）受信した後に送信したような矛盾が起きるかもしれません。そうした矛盾を避ける（負の時間ではなく、０にする）ために一つ目の式（下記）が使われます。

[code]

    apparent_age = max(0, response_time - date_value);
    
[/code]

経過時間値(age_value)は、HTTP/1.1の機能なので、途中にHTTP/1.0のマシンが介在すると不正確なものになります(HTTP/1.0にage_valueの項目はないので、たぶん0になる）そこで、apparent_ageとage_valueのうち良さそうな方を使おうという次式が出てきます。

[code]

    corrected_received_age = max(apparent_age, age_value);
    
[/code]

複数のマシンで構成されるネットワークシステムでは、すべてのマシンの仕様が合っている、すべてのマシンの時計の同期がとれているというような整った環境が期待できないので、すこしでも"ましな"経過時間を得ようとして（結果として役にたたないかもしれないけど）奮闘しているところが余分にみえるのかもしれません。


CC BY-SA 4.0
2018-11-02T06:04:31.000
49885
2018-11-02T06:04:31.000
217
49868
answer