標籤:頭資訊 方式 方法 負數 獨立 ted ons 添加 而不是
這裡的Age指的是回應標頭Age。以下內容有部分翻譯,也有部分自己的理解。歡迎討論。
我們用now表示當前主機的目前時間,用request_time表示緩衝發起請求的時間,用response_time表示緩衝收到響應的時間。
HTTP/1.1要求源server的每個響應都包括一個Date頭資訊。表示這個響應被源server建立的時間,我們用date_value表示這個Date頭的值。
HTTP/1.1使用Age回應標頭表示響應從緩衝中拿到時響應的壽命,我們用age_value表示Age頭的值。
緩衝中響應的壽命能夠通過兩種全然獨立的方式計算:
1. 直接用response_time(緩衝收到響應的時間)減去date_value(響應被建立的時間),假設為負數,用0替代。
2. 假設響應路徑上的全部緩衝實現了HTTP/1.1,則直接用age_value值。
但實際上,我們非常難保證響應路徑上的全部緩衝都實現了HTTP/1.1,所以。同一時候使用這兩種方式。然後進行修正,結果會更可靠:
corrected_received_age= max(response_time - date_value, age_value);
到這裡還沒有完畢終於計算,corrected_received_age僅僅是緩衝收到響應時,響應的壽命,沒有考慮響應到下一個緩衝或client的網路延遲時間。
由於網路會有延遲,在傳輸過程中壽命已經添加了。下一個緩衝就得考慮這個因素。對於這個因素,HTTP/1.1採用了一種比較保守的計算方法。假設從請求發起到收到響應的時間就是網路延遲的時間(結果不一定就是實際經過的時間),用response_delay表示:
response_delay= response_time – request_time;
corrected_initial_age= corrected_received_age + response_delay;
response_delay一般指最後一個緩衝到client的延誤時間,假設響應路徑上有多個緩衝。不須要迭代。由於corrected_received_age是依據緩衝收到響應的時間,已經減去了前面的網路延遲。
以上還僅僅是計算響應第一次出如今緩衝中時已經擁有的壽命。響應一旦被緩衝,就可能被多次使用,這個時候,響應的壽命就得由緩衝來計算了。
我們用resident_time表示響應在緩衝中貯存的時間。用current_age表示響應的當前壽命:
resident_time= now - response_time;
current_age= corrected_initial_age + resident_time;
假設響應路徑中有緩衝。請求終於受到的回應標頭Age相應的值是current_age。而不是server最初給的Age,由於這個值被緩衝已經改動過了。
HTTP Cache怎樣計算Age