1.概念html
Cache-control用於控制HTTP緩存(在HTTP/1.0中可能部分沒實現,僅僅實現了Pragma: no-cache)apache
數據包中的格式:瀏覽器
Cache-Control: cache-directive緩存
cache-directive能夠爲如下:服務器
request時用到:ui
| "no-cache" | "no-store" | "max-age" "=" delta-seconds | "max-stale" [ "=" delta-seconds ] | "min-fresh" "=" delta-seconds | "no-transform" | "only-if-cached" | "cache-extension"
response時用到:spa
| "public" | "private" [ "=" <"> field-name <"> ] | "no-cache" [ "=" <"> field-name <"> ] | "no-store" | "no-transform" | "must-revalidate" | "proxy-revalidate" | "max-age" "=" delta-seconds | "s-maxage" "=" delta-seconds | "cache-extension"
部分說明: 根據是否可緩存分爲 Public 指示響應可被任何緩存區緩存。 Private 指示對於單個用戶的整個或部分響應消息,不能被共享緩存處理。這容許服務器僅僅描述當用戶的 部分響應消息,此響應消息對於其餘用戶的請求無效。 no-cache 指示請求或響應消息不能緩存(HTTP/1.0用Pragma的no-cache替換) 根據什麼能被緩存 no-store 用於防止重要的信息被無心的發佈。在請求消息中發送將使得請求和響應消息都不使用緩存。 根據緩存超時 max-age 指示客戶機能夠接收生存期不大於指定時間(以秒爲單位)的響應。 min-fresh 指示客戶機能夠接收響應時間小於當前時間加上指定時間的響應。 max-stale 指示客戶機能夠接收超出超時期間的響應消息。若是指定max-stale消息的值,那麼客戶機能夠 接收超出超時期指定值以內的響應消息。Expires 表示存在時間,容許客戶端在這個時間以前不去檢查(發請求),等同max-age的 效果。可是若是同時存在,則被Cache-Control的max-age覆蓋。 格式: Expires = "Expires" ":" HTTP-date 例如 Expires: Thu, 01 Dec 1994 16:00:00 GMT (必須是GMT格式)
2.應用 經過HTTP的META設置expires和cache-control <meta http-equiv="Cache-Control" content="max-age=7200" /> <meta http-equiv="Expires" content="Mon, 20 Jul 2009 23:00:00 GMT" /> 上述設置僅爲舉例,實際使用其一便可。這樣寫的話僅對該網頁有效,對網頁中的圖片或其餘請求無效,並不會作任何cache。 這樣客戶端的請求就多了,儘管只是檢查Last-modified狀態的東西,可是請求一多對瀏覽速度一定有影響。
若是要對文件添加cache能夠經過apache的mod_expire模塊,寫法爲 <IfModule mod_expires.c> ExpiresActive On ExpiresDefault "access plus 1 days"
</IfModule> 記得ExpiresActive設爲On,我起先沒設置On,彷佛怎樣YSlow都查不到緩存機制。這樣添加的話就是默認全部的。
若是要針對個別MIME類型則能夠: ExpiresByType image/gif "access plus 5 hours 3 minutes" 見 Apache Module mod_expires另外,當點擊瀏覽器上的刷新,客戶端發送的請求中均是max-age=0,表示validate操做,發送請求到服務器 要求檢查cache,再更新cache,通常獲得的是304 Not Modified,表示沒變更。