簡體   English   中英

沒有設置“ Expires”和“ Cache-Control”頭,而忽略了“ Last-Modified”或“ ETag”,為什么?

[英]No “Expires” and no “Cache-Control” header set, yet “Last-Modified” or “ETag” are being ignored, why?

盡管“ ETag”已更改且“上次修改時間”設置為比服務器緩存的資源新的日期,但Chrome仍從緩存中加載文件。 這是為什么??

最好在Cache-Control中始終設置Expires或max-age。 如果您不指定資源何時過期,則允許瀏覽器使用其自己的啟發式進行緩存。 參見RFC 2616的13.2.4節:

如果響應中沒有Expires,Cache-Control:max-age或Cache-Control:s-maxage(參見14.9.3節),並且響應中不包含其他對緩存的限制,則緩存可以計算新鮮度一生使用啟發式。 如果還沒有添加警告,則緩存必須將警告113附加到超過24小時的任何響應。

同樣,如果響應確實具有最后修改時間,則啟發式到期值應不超過該時間間隔的一部分。 該比例的典型設置可能是10%。

確定響應是否已過期的計算非常簡單:

  response_is_fresh = (freshness_lifetime > current_age) 

Chrome緩存了該資源,因為您尚未指示是否應該緩存該資源。 一旦瀏覽器確定資源過時,Last-Modified僅由瀏覽器用來驗證資源。

您需要設置Expires或Cache-Control來獲得所需的緩存行為。

順便說一句,對於大多數網站來說,一個很好的經驗法則是立即使HTML過期,但永遠緩存圖像,CSS和JavaScript:

http://blog.httpwatch.com/2007/12/10/two-simple-rules-for-http-caching/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM