天天看點

浏覽器緩存相關http頭

最近看雅虎黃金34條,學習下優化網站性能的方法。其中有一條:“為檔案頭指定expires或cache-control”,具體來說指對于靜态内容:設定檔案頭過期時間expires的值為“never

expire”永不過期;而對于動态内容:使用恰當的cache-control檔案頭來幫助浏覽器進行有條件的請求。

這一條可以和雅虎34條的第一條聯系起來,那就是盡量減少http的請求次數(雅虎34條很多都是努力去減少http請求為目的的),畢竟如果有太多的資源需要下載下傳需要新的http連結疊加起來的耗時是不容忽視的。是以可以利用緩存技術來對網站的性能加以優化,進而避免不必要的http請求。剛好可以順便整理下浏覽器相關的緩存技術和與緩存相關的http的頭:

1.expires(過期時間):

http頭資訊expires(過期時間)

屬性是http控制緩存的基本手段,告訴浏覽器緩存儲存的時間。過了這個時間,緩存器就會向源伺服器發送請求,檢查文檔是否被修改。适用于設定靜态圖檔檔案等等,而且對于控制有規律改變的網頁也很有用,比如設定間隔固定的時間去更新等等;如果使用了expires檔案頭,當頁面内容改變時就必須改變内容的檔案名。比如yahoo經常使用這樣的步驟:在内容的檔案名中加上版本号,如yahoo_2.0.6.js,進而能夠主動進行更新。

使用expires: 如果你使用的是伺服器,可以使用expiresdefault來設定相對目前日期的過期時間,使用mod_expires,在httpd.conf或者.htaccess中加上

2.cache-control

各個消息中的指令含義如下:

1.public訓示響應可被任何緩存區緩存;

2.private訓示對于單個使用者的整個或部分響應消息,不能被共享緩存處理。這允許伺服器僅僅描述當使用者的部分響應消息,此響應消息對于其他使用者的請求無效。

3.no-cache訓示請求或響應消息不能緩存;

4.no-store用于防止重要的資訊被無意的釋出。在請求消息中發送将使得請求和響應消息都不使用緩存;

5.max-age訓示客戶機可以接收生存期不大于指定時間(以秒為機關)的響應。

6.min-fresh訓示客戶機可以接收響應時間小于目前時間加上指定時間的響應。

7.max-stale訓示客戶機可以接收超出逾時期間的響應消息。如果指定max-stale消息的值,那麼客戶機可以接收超出逾時期指定值之内的響應消息;

舉例:

一般說來這種靜态檔案永遠不應該過期,如果真的要給這個cache加上一個期限,那我希望是

——一萬年

即:“cache-control:

max-age = 315360000000”

3.last-modified/if-modified-since

http/1.1 200 ok

last-modified:

tue, 12 dec 2006 03:03:59 gmt

etag: “10c24bc-4ab-457e1c1f”

content-length: 12195

稍後,如果浏覽器要驗證一個檔案,它會使用if-none-match檔案頭來把etag傳回給原始伺服器。在這個例子中,如果etag比對,就會傳回一 個304狀态碼,這就節省了12195位元組的響應。 

get

/i/yahoo.gif http/1.1

host: us.yimg.com

if-modified-since: tue, 12 dec 2006 03:03:59 gmt

if-none-match: “10c24bc-4ab-457e1c1f”

http/1.1 304 not modified

關于以上幾種緩存機制的優先級,在網上找到一種說法:

no-cache>expires>last-modified

也就是講,最前面的最重要,前面的生效後,後面的基本就失效了

繼續閱讀