瀏覽器緩存segmentfault
瀏覽器緩存分爲幾個階段:瀏覽器
1.cache-control
: 決定了瀏覽器端和服務器端緩存的策略,能夠出如今響應頭response header中,或者 請求頭 request header中緩存
max-age
:指定緩存的最大有效時間,eg:cache-control:max-age=315360000
,注意與expires
作區分(與cache-control
平級),max-age
優先級高於 expires
,這個屬性時HTTP1.1中新增的屬性s-maxage
:指定public
的緩存,緩存設備有不少,不單單瀏覽器是緩存設備,在整個網絡中,可能會存在代理服務器,CDN
屬於public
緩存設備,由於能夠多用戶訪問並讀取信息;什麼是private緩存呢,指的是隻是你我的訪問的設備,瀏覽器就屬於private緩存設備,eg:s-maxage=31536000;他的優先級高於max-age,只能設定public的緩存設備private
public
no-cache
:錯誤理解:不使用緩存;no-cache指的是無論本地是否設置了max-age(即忽略本地瀏覽器端的緩存策略),都要向服務器端發送請求,由服務器端來判斷緩存狀況no-store
:徹底不使用任何的緩存策略,無論是服務器端仍是瀏覽器端的2.expires:Thu, 14 Mar 2019 17:29:17 GMT
,這個屬性時HTTP1.0
中配置,服務器
基於客戶端和服務器端的協商緩存機制網絡
1.last-modified
代理
last-modified
- response headerif-modified-since
- request headercode
須要與cache-control共同使用,若是配置了max-age
且沒有過時,就不會使用last-modified;過時了以後,纔會使用last-modified。資源
last-modified
缺點:文檔
2.ETag
get
文檔內容的hash值
ETag ---- response header
if-None-Match ----request header
etag
優先級高於last-modified
200(from cache)
: 瀏覽器端緩存,cache-control:max-age=315360000
expires
起做用304
: 服務器端緩存,last-modified
或者 etag
起做用注意:Chrome瀏覽器,手動點擊刷新按鈕都會 在請求頭中,添加 chche-control:max-age=0
,這樣就確定不會使用瀏覽器端的緩存!
更加詳細,請參考:緩存詳解