2011-06-23 29 views
0
HTTP/1.1 200 OK 
Date: Thu, 23 Jun 2011 07:59:40 GMT 
Server: Apache/2.2.16 (Amazon) 
Last-Modified: Thu, 23 Jun 2011 07:28:10 GMT 
ETag: "68a7f-278-4a65c06e95680" 
Accept-Ranges: bytes 
Content-Length: 632 
Keep-Alive: timeout=15, max=100 
Connection: Keep-Alive 
Content-Type: text/html; charset=UTF-8 

以上是響應的http標頭。它沒有Cache-control屬性,但具有Etag和Last-Modified屬性。瀏覽器如何處理這種情況?現在緩存被認爲是新鮮的多久了?Etag屬性存在,但HTTP標頭中沒有Cache控件

回答

1

根據RFC 2616第13.2.4:

13.2.4過期計算

爲了決定一個 響應是否新鮮或陳舊的,我們需要 其新鮮壽命比較其 年齡。年齡按照13.2.3節中描述的
計算;該 部分描述如何計算新鮮度生命週期
以及如何確定響應是否已過期。
在下面的討論中,值 可以用適合算術運算的任何形式
來表示。

我們使用術語「expires_value」到 表示Expires
標頭的值。我們使用術語 「max_age_value」來表示由「最大年齡」 指令在響應緩存控制 報頭攜帶 秒數的 適當的值(見14.9.3 )。

的最大年齡指令採用 優先於到期,所以如果 最大年齡是存在於響應, 計算很簡單:

freshness_lifetime = max_age_value 

否則,如果到期時間 響應存在,該計算方法是:

freshness_lifetime = expires_value - date_value 

注意,無論這些 計算很容易受到時鐘 SK因爲所有信息 都來自原始服務器。

如果沒有到期,緩存控制: 最大生存週期,或緩存控制:S-
最大生存週期(見14.9.3)中 出現響應,和響應不 不包括其它限制在 緩存上,緩存可以使用啓發式來計算新鮮度生命期。 緩存必須將警告113 附加到年齡大於 24小時的任何響應,如果此類警告尚未添加 。

此外,如果響應確實有 上次修改時間,啓發式
到期值應不大於間隔
因爲那時的一些部分更 。 這個分數的典型設置可能是10%。

的計算,以確定是否 響應已過期相當
簡單:

response_is_fresh = (freshness_lifetime > current_age) 
+0

我仍不清楚用於計算到期時間啓發式的。請用一些例子來解釋啓發式部分。 10%適用於什麼時間間隔? – pikini

+0

啓發式應用程序定義,使用任何你想要的。結果值不應超過「Last-Modified」標題中指定的時間與當前時間之間的一小部分時間(10%僅爲示例)。 –