2012-09-30 39 views
2

有人可以澄清關於緩存的這個聲明。設置過期和緩存控制:max-age

https://developers.google.com/speed/docs/best-practices/caching

是多餘的同時指定ExpiresCache-Control: max-age,或同時指定Last-ModifiedETag

再後來它說

指紋識別機制允許服務器到Expires頭設置爲提前申請日的整整一年; Last-Modified標題到文件上次修改日期;和Cache-Control: max-age標題爲3153600

後者這一說法違背了之前 - 關於不同時設置ExpiresCache-Control

第一個聲明是否是規範,第二個聲明是異常?或者這個文件是否違背了它自己的建議?有什麼建議?

謝謝。

回答

2

嗯......

我可以告訴你,第一個說法是正確的,因爲你真的不需要,因爲他們都做同時指定[過期] [最大年齡]頭同樣的事情(設置緩存的最大時間段)

同樣適用於[上次修改]和[Etag],因爲兩者都具有新鮮度。

我同意似乎有一些混淆,因爲他們稍後給出的示例同時使用[Expires]和[Max-Age]標頭。

乍一看,這看起來像某種文檔錯誤。

的是,你需要記住的是,雖然你不同時使用[過期]和[最大年齡],你一定可以使用這兩個,就像只要它們指向的同一日期 - 就像他們提供的例子一樣。

總結:關於裁員的

第一條語句會談(這是沒有必要的「壞」,而且可以「只是」浪費)。他們稍後給出的例子雖然沒有優化,但不會引起任何問題。

只要你沒有使用兩個標題設置不同的截止日期,你就會很好。

+0

+1「冗餘不壞」。可能他們會這樣做,以便爲每個可能的客戶端定位,以防萬一其中一個頭部不起作用。 – user123444555621

10

Http中的[Cache-Control:max-age]和[Expires]做同樣的事情,這就是爲什麼它們是冗餘的原因。 但是它們之間還是有一些很大的區別,[Cache-Control]是http/1.1標準,Expires是http/1.0。如果客戶端瀏覽器不支持http/1.1緩存 - 控制將被忽略,這就是您可以同時使用它們的原因。

如果您同時使用它們,[Cache-Control]具有優先權。 更多信息,你可以在這裏找到: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3