Http快取機制

2021-07-14 16:56:55 字數 2136 閱讀 6380

快取快取,就是把需要的東西存起來,不需要每次都去請求。主要目的減小伺服器壓力,放到客戶端上來講,還利於節省流量,還能流暢的把ui顯示出來,提高了使用者體驗。對於http快取來講,主要的就是校驗快取的有效性,也就是新鮮度。如果客戶端不能及時響應服務端的資料變化,快取一直不能被更新,那不就是得不償失了?

1.expires策略

expires是web伺服器響應訊息頭欄位,在響應http請求時告訴瀏覽器在過期時間前瀏覽器可以直接從瀏覽器緩訪問資料,而無需再次請求。expires規定了快取失效時間,客戶端拿當前時間和這個失效時間比較,如果超過了這個時間,即無效。

expires策略有2個明顯的缺點:

1.快取時間依賴於客戶端,每個客戶端的時間可能不相同,精度不高。

2.快取有效期的時間精度不高。

舉個例子,乙個新聞列表的快取時間是有後台運營決定的,當我產生這個列表的時候是無法確定該列表到底多久以後會被更新,只能預估乙個時間。只有當列表被更新,我才知道這個更新時間之前的資源都是過期的。

而且,expires是http1.0的東西,而cache-control是http1.1的,規定如果max-age和expires同時存在,前者優先順序高於後者

2.cache-control策略

cache -control指定請求和響應遵循的快取機制。

響應訊息中的指令包括

1.

public指示響應可被任何快取區快取。

2.private指示對於單個使用者的整個或部分響應訊息,不能被共享快取處理。這允許伺服器僅僅描述當使用者的部分響應訊息,此響應訊息對於其他使用者的請求無效。

3.no-cache指示請求或響應訊息不能快取

4.no-store用於防止重要的資訊被無意的發布。在請求訊息中傳送將使得請求和響應訊息都不使用快取。

5.max

-age指示客戶機可以接收生存期不大於指定時間(以秒為單位)的響應。

6.min

-fresh指示客戶機可以接收響應時間小於當前時間加上指定時間的響應。

7.max

-stale指示客戶機可以接收超出超時期間的響應訊息。如果指定max

-stale訊息的值,那麼客戶機可以接收超出超時期指定值之內的響應訊息。

3.快取校驗字段.last-modified/if-modified-since

last-modified:標示這個響應資源的最後修改時間。web伺服器在響應請求時,告訴客戶端資源的最後修改時間。

if-modified-since:當資源過期時(使用cache-control標識的max-age),發現資源具有last-modified宣告,則再次向web伺服器請求時帶上頭 if-modified-since,表示請求時間。web伺服器收到請求後發現有頭if-modified-since 則與被請求資源的最後修改時間進行比對。若最後修改時間較新,說明資源又被改動過,則響應整片資源內容(寫在響應訊息包體內),http 200;若最後修改時間較舊,說明資源無新修改,則響應http 304 (無需包體,節省瀏覽),告知瀏覽器繼續使用所儲存的cache。

etag/if-none-match

etag:web伺服器響應請求時,告訴瀏覽器當前資源在伺服器的唯一標識(生成規則由伺服器覺得)。apache中,etag的值,預設是對檔案的索引節(inode),大小(size)和最後修改時間(mtime)進行hash後得到的。

if-none-match:當資源過期時(使用cache-control標識的max-age),發現資源具有etage宣告,則再次向web伺服器請求時帶上頭if-none-match (etag的值)。web伺服器收到請求後發現有頭if-none-match 則與被請求資源的相應校驗串進行比對,決定返回200或304。

當第一次發起請求時:

(來自於網路)

第二次請求:

HTTP 快取機制

基於 header的示例 content length 3534http快取策略分為 1 快取策略 cache control 頭里的 public private no cache max age no store 其中no store為不儲存,no cache 0秒的max age 2 快取過期...

http快取機制

首先需要了解http協議的響應頭中的幾個欄位的含義 cache control expires 該欄位表示資源的過期時間。etag 該欄位表示資源的唯一標識。last modified 該欄位表示資源的最後修改時間。有以下2個問題需要注意 為什麼優先校驗etag,後校驗last modified?因...

HTTP快取機制

http快取有多種規則,根據是否需要重新向伺服器發起請求來分類,我將其分為兩大類 強制快取,對比快取 在詳細介紹這兩種規則之前,先通過時序圖的方式,讓大家對這兩種規則有個簡單了解。已存在快取資料時,僅基於強制快取,請求資料的流程如下 已存在快取資料時,僅基於對比快取,請求資料的流程如下 對快取機制不...