Cache-Control must-revalidate setHeader詳解 http緩存

客戶端(瀏覽器)從服務器請求數據經歷以下基本步驟: 瀏覽器

 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-revlidateplus 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.

就這樣,本文參考了

百度

谷歌

相關文章
相關標籤/搜索