客戶端(瀏覽器)從服務器請求數據經歷以下基本步驟: 瀏覽器
1.用戶發起一個http請求,緩存獲取到URL,根據URL查找是否有匹配的副本,這個副本可能在內存中,也可 能在本地磁盤。 緩存
二、若是請求命中本地緩存則從本地緩存中獲取一個對應資源的"copy"; 服務器
三、檢查這個"copy"是否過時,不然直接返回,是則繼續向服務器轉發請求。 HTTP中,經過Cache-Control首部和Expires首部爲文檔指定了過時時間,經過對過時時間的判斷,緩存就能夠知道文檔是否是在保質期內。Expires首部和Cache-Control:max-age首部都是來告訴緩存文檔有沒有過時,爲何須要兩個響應首部來作這件簡單的事情了?其實這一切都是歷史緣由,Expires首部是HTTP 1.0中提出來的,由於他使用的是絕對日期,若是服務端和客戶端時鐘不一樣步的話(實際上這種狀況很是常見),緩存可能就會認爲文檔已通過了保質期。
四、服務器接收到請求,而後判斷資源是否變動,是則返回新內容,不然返回304,未變動,更新過時時間。
spa
先看Cache-Control可選的參數:private、public 、no-cache、max-age、must-revalidate等代理
緩存分類code
1)私有緩存orm
常見就是咱們的瀏覽器裏內置的緩存。內存
2)公有緩存資源
常見的就是代理緩存。文檔
private 修飾私有緩存
public 修飾公有緩存
no-cache 強制客戶端跳過步驟2,直接向服務器發送請求。
max-age 上文說了過時時間,例如6分鐘後過時。
must-revalidate 這個比較難理解找了很久資料 ,字面理解 必須從新驗證 引用別人的一句話吧
I believe that must-revalidate
means "once the cache expires, refuse to return stale responses to the user even if they say that they are acceptable". Whereas no-cache
implies must-revlidate
plus the fact the response becomes stale right away.
If a response is cacheable for 10 seconds, then must-revalidate
kicks in after 10 seconds, whereas no-cache
implies must-revalidate
after 0 seconds.
At least, that's my interpretation.
就這樣,本文參考了
百度
谷歌