HTTP緩存機制與原理解析

HTTP報文

HTTP報文分爲兩個部分

  • Header:報頭,填寫着相關一些字段屬性,與HTTP緩存相關的規則就保存在Header中
  • Body:用來存放HTTP傳輸的真正數據

HTTP緩存

HTTP緩存涉及到三個主主體:客戶端瀏覽器,緩存數據庫和服務端。而HTTP緩存又分爲兩種:

  • 強緩存
  • 協商緩存

強緩存

其基本思想就是:當數據不存在於緩存數據庫時,此時會直接去請求服務器,並把得到的結果寫入緩存數據庫中;若數據存在緩存數據庫且未過時,則直接去緩存數據庫中查詢,完成這次請求。

流程如下:
在這裏插入圖片描述

在這裏插入圖片描述
還是比較容易理解。另外需要注意的是:請求服務器資源成功的響應碼是200,而從緩存數據庫中請求成功的響應碼是304。
和強緩存相關的首部字段有三個:
1.Expire:規定緩存過期的絕對時間,由於客戶端時間和服務端時間存在偏差,所以在HTTP1.1之後的版本一般來說都不會使用這個字段了
2.Cache-Control:與緩存相關字段,常用的幾個取值有:

  • private:客戶端可以緩存
  • public:客戶端和代理服務器都可以緩存
  • max-age:緩存失效的一個相對時間,單位爲秒
  • must-revalidate:規定了緩存在使用之前必須驗證舊資源的狀態,並且不可以使用過期數據

這是強緩存的時候,那當緩存失效之後怎麼辦?此時就要進行協商緩存了

協商緩存

當請求的值在緩存數據庫中失效,或者首部字段中明確要求每次讀取緩存後都要去服務端進行一次驗證,並且不能使用過期數據時,使用協商緩存
協商緩存的機制其實也很簡單:查看緩存數據庫中對應資源緩存是否已經過期,如果是的話,在使用緩存數據之前還要向服務端發送一次HEAD請求,主要用來檢驗對應數據是否已經被更新過,如果沒有的話,則可以直接使用緩存數據庫中的過期值,如果已經被更新過,那麼就要從服務端中重新請求新值。
檢驗是否過期的方法很簡單:
在第一次從服務端獲取資源時,響應報文首部有一個last-modified字段,用於記錄這個資源的最近一次更新時間,那在發送HEAD請求確認的時候,會寫入一個if-modified-since字段,這個字段的值就是接受到的last-modified。在服務端中檢查這個if-modified-since值和last-modified值是否相等,如果相等說明沒有會被更新,可以放心使用緩存數據庫的值,如果不相等,說明已經被更新過了,此時從服務端請求新值。

總結就是:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章