2011-05-02 46 views
3
  1. 如果沒有過期的HTTP標頭在響應設置,這是什麼意思爲瀏覽器?
  2. GlassFish v3中,如何配置到期的已部署在文檔根目錄不能作爲戰爭文件的靜態資源頭?
  3. 我注意到Glassfish似乎默認設置了ETag標頭。真的嗎? 我希望在這裏實現的最終目標是設置一個遙遠未來的過期標題,但只要部署新版本的css,js,圖像文件就能告訴瀏覽器「有新東西」。

感謝這麼多的任何建議。有關問題expires頭

+0

也就是說3個問題,而不是一個。 – Raedwald 2015-03-29 17:39:35

回答

2

對於expires在服務器響應的報頭沒有提供,見§14.21這裏: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

即使當提供時,expiresmax-age指令重寫,因此,如果expires不設置max-age被使用。如果沒有提供,那麼看到這裏§13.2.4: http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.2.4 基本上它說,客戶端可以爲一個不確定的時間段內設置緩存,並沒有一致。

要解決您的問題,您可能會說您的靜態元素永遠不會過期,併爲HTML文檔的包含元素添加過期時間。要做到這一點,在這裏看到: http://www.tipsandtricks-hq.com/how-to-add-far-future-expires-headers-to-your-wordpress-site-1533

引用:「要添加過期頭圖像,CSS,JavaScript文件添加以下到您的.htaccess文件

過期頭

> <FilesMatch "\.(ico|jpg|jpeg|png|gif|js|css|swf)$"> 
> ExpiresDefault "access plus 2 hours" 
> </FilesMatch> 

或過期images header header

> ExpiresActive On 
> ExpiresDefault A0 
> ExpiresByType image/gif A2592000 

[...] 請記住,當你使用過期頭文件在瀏覽器中緩存,直到它過期,所以不要使用在頻繁變化的文件。如果您更改/更新具有遙遠未來期限的文件(例如,CSS或javascript文件),則應重命名該文件並使用重命名版本,以便瀏覽器不會獲取舊文件。「

+0

感謝您的提示! – 2012-03-01 09:59:25

4

閱讀http://blogs.msdn.com/b/ie/archive/2010/07/14/caching-improvements-in-internet-explorer-9.aspx背景。

  1. 如果你不指定新鮮度,一些瀏覽器會每次檢查。有些會每次檢查一次。如果提供了最新版本的瀏覽器,將嘗試計算自Last-Modified日期以來10%的啓發式到期時間。如果沒有,他們會每次檢查或每次檢查一次。
  2. 不知道。
  3. 這是HTTP過期沒怎麼works--瀏覽器不會神奇地「知道」新的內容出現在服務器上(怎麼可能呢?)。如果您想更改緩存在客戶端上的內容,則需要更改網址以便忽略舊的緩存內容。
0

無論不管Expires頭是否設置,實際執行的動作都是依賴於實現的,這只是對瀏覽器的一個建議,任何給定瀏覽器的任何給定版本都可以隨意忽略它。可以追加一個查詢字符串,或者一個版本號,最後修改日期(如果你的樣式表或JavaScript正在改變每天一次超過,你不使用測試或分期正確),或文件的當前校驗和。例如,而不是site.css,你可以使用

<link rel="stylesheet" href="site.css?lastmodified=20110605"> 

<link rel="stylesheet" 
    href="site.css?sha1sum=da39a3ee5e6b4b0d3255bfef95601890afd80709"> 
0

這不是一個完整的答案,但它更容易在回答中格式化輸出比評論。

  1. 如果沒有「expires」標題並且沒有其他緩存標題,瀏覽器不應該緩存 內容。但是,如果你有例如Last-Modified標題,然後瀏覽器不需要expires頭緩存內容,並知道什麼時候已經過期。
  2. 不知道
  3. expires不需要緩存頁面,它實際上意味着動態內容當你知道(如果它每天生成的圖形爲例)可能的到期日期。文檔到期的方式有很多種。例如,如果指定了文件Last-Modified頭和正確的內容長度已知,那麼瀏覽器可以緩存頁面,並在下一次可以使用If-Modified-Since頭,這將導致304 Not Modified,使瀏覽器可以顯示緩存的內容。所以,如果Last-Modified是有別擔心 - 瀏覽器將始終顯示新版本(除了極少數例外)