http快取策略

2022-09-06 19:09:09 字數 2831 閱讀 3567

首次訪問或已清除快取時,(瀏覽器無快取資料),(向伺服器請求資源),伺服器在返回(資源)和(快取策略),http狀態碼為200;客戶端拿到後將資料和快取策略快取到瀏覽器。

快取策略

存在於響應頭里,

快取策略主要有:強制快取 和 協商(對比)快取,

快取策略 快取到瀏覽器

或者

強制快取

伺服器響應頭會有2個字段來表示,expires/cache-control。

response cache-control

cache-control欄位解析:

ps:優先順序:  max-age > expires 。 

max-age,max-stale 和 min-fresh 的關係:age  (已快取的時間) (伺服器首次發出或最後一次被伺服器再驗證     之後過去的時間),

如果 age + min-fresh < max-age,快取未過期;

如果 age + min-fresh >= max-age && age + min-fresh < max-age + max-stale,則雖然快取過期了,但是快取繼續可以使用,只是在頭部新增 110 警告碼;

如果 age + min-fresh >= max-age + max-stale,則快取過期且不可使用。快取使用期 age 的計算可以參考《http 權威指南》的 7.11.2 節,具體關於快取使用期和新鮮生存期的問題可以參考 7.11 節。

no-cache 和 no-store 區別:no-cache 實際會進行快取,只是在快取響應之前會先進行一次新鮮度再驗證(瀏覽器的 f5 重新整理);

no-store 不會進行快取,每次都是向獲取伺服器的最新資料(瀏覽器的強制重新整理)

有兩種實現方式最近修改日期( last-modified ) 和實體標籤( etag )驗證。(優先順序:etag  >  last-modified)

相關字段

最近修改日期(if-modified-since)驗證:

last-modified (伺服器資源   最近修改日期

)>= if-modified-since(本地快取資源    最近修改日期) 則新鮮度過期。也可配合 if-unmodified-sinece。

實體標籤(etag)驗證:

通過特定標籤對比進行驗證,比如 etag 可以用來存版本號,這樣就可以通過版本號對比檢視新鮮度,可以配合 if-none-match 來使用,不同則修改過,返回新資源200,否則使用本地快取304

試探性過期

當 response 中沒有 cache-control:max-age 和 expires 的時候,快取可以計算出乙個試探性最大使用期。常用演算法 lm—factor 演算法。

快取位置

我們可以在 chrome 的開發者工具中,network -> size 一列看到

乙個請求最終的處理方式:

它們的優先順序是:(由上到下尋找,找到即返回;找不到則繼續)

service worker、

memory cache、

硬碟 cache、

網路請求

memory cache(記憶體中的快取)

幾乎所有的  網路請求資源   都會被瀏覽器自動加入到 memory cache 中。  因為數量很大且不斷擴充套件,只能是個「短期儲存」,瀏覽器的本標籤關閉後失效;極端情況下 ,如果乙個頁面占用記憶體太大,在關閉前,排在前面的快取就已經失效了;

disk cache(http cache,儲存在硬碟上的快取)

絕大部分的   快取都來自disk cache。持久儲存的,(網路請求《讀取速度《記憶體),是實際存在於檔案系統中的。而且它允許相同的資源在跨會話,甚至跨站點的情況下使用,例如兩個站點都使用了同一張。disk cache 會嚴格根據 http頭資訊中的各類欄位來判定哪些資源可以快取,哪些資源不可以快取;哪些資源是仍然可用的,哪些資源是過時需要重新請求的。

serviceworker

探索中,詳情參考:

這個快取是永久性的,即關閉 tab 或者瀏覽器,下次開啟依然還在。

有兩種情況會導致這個快取中的資源被清除:手動呼叫 apicache.delete(resource)或者容量超過限制,被瀏覽器全部清空。

注意:經過 service worker 的fetch()方法獲取的資源,即便它並沒有命中 service worker 快取,甚至實際走了網路請求,也會標註為from serviceworker

如果乙個請求在上述 3 個位置都沒有找到快取,那麼瀏覽器會正式傳送網路請求去獲取內容。之後容易想到,為了提公升之後請求的快取命中率,自然要把這個資源新增到快取中去。具體來說:

根據 service worker 中的 handler 決定是否存入 cache storage (額外的快取位置)。

根據 http 頭部的相關字段(cache-control,pragma等)決定是否存入 disk cache

memory cache 儲存乙份資源 的引用,以備下次使用。

HTTP 快取策略

瀏覽器一般快取 css js等靜態檔案,因為這些檔案的更新頻率相對來說比較低,合理利用瀏覽器的快取對 的效能提公升有很大幫助。http快取分為兩部分,分別是本地快取和快取協商,當本地快取不生效時會啟用快取協商。http快取主要由http協議的頭 header 資訊來制定。本地快取 本地快取是指瀏覽器...

HTTP快取策略

瀏覽器一般快取 css js等靜態檔案,因為這些檔案的更新頻率相對來說比較低,合理利用瀏覽器的快取對 的效能提公升有很大幫助。http快取分為兩部分,分別是本地快取和快取協商,當本地快取不生效時會啟用快取協商。http快取主要由http協議的頭 header 資訊來制定。本地快取是指當瀏覽器請求資源...

HTTP 快取策略

前端開發的同學大家都知道,專案中的靜態檔案等資訊,都要做快取處理,這裡,我們就來說一下http的快取策略。快取,顧名思義,其實就把是拿到的資源存起來,下次要用的時候就可以直接使用啦。有什麼作用呢?重用已獲取的資源能夠有效的提公升 與應用的效能。快取其實是乙個很廣義的概念,用到的地方很多,當然作用只有...