摘要:協商緩存用戶發送的請求,發送到服務器后,由服務器判定是否從緩存中獲取資源。如果想主動清除緩存,也可以在請求頭信息中加入來禁止緩存。主要取值如下緩存的時效由決定。是的字段,而是的字段,當與同時存在時,的優先級要高于。
在講這幾個屬性之前,先復習下瀏覽器的緩存機制,再結合了解一下Last-Modified / If-Modified-Since、Etag / If-Match、cache-control / expires
瀏覽器緩存位置分為四種,其優先級順序如下:
Service Worker、Memory Cache、Disk Cache、Push Cache,當上述四個緩存位置中的緩存都沒有命中時,則會向服務器發起請求。
Service Worker: 不做了解;
Push Cache: 不做了解;
Memory Cache: 即內存中的緩存,其特點是容量小、讀取高效、持續性短,會隨著進程的釋放而釋放,在內存使用率低、緩存小尺寸資源時,會以 Memory Cache 為優先;
Disk Cache: 即磁盤中的緩存,其特點是容量大、讀取緩慢、持續性長,任何資源都能存儲到磁盤中,在內存使用率高、緩存大尺寸資源時,會以 Disk Cache 為優先;
瀏覽器緩存策略分為兩種,強緩存和協商緩存:
強制緩存
用戶發送的請求,直接從客戶端緩存中獲取,不發送請求到服務器,不與服務器發生交互行為。
協商緩存
用戶發送的請求,發送到服務器后,由服務器判定是否從緩存中獲取資源。
可用如下流程圖來概括瀏覽器的緩存機制:
瀏覽器的緩存主要是針對靜態資源進行緩存,如圖片、文件、js等。
當用戶發起請求時,瀏覽器先執行(a)步驟,查看是否有緩存,如果我們用的是谷歌瀏覽器,也可以在地址欄輸入chrome://cache/查看你發起的請求鏈接是否在緩存列表中。如果想主動清除緩存,也可以在請求頭信息中加入“Cache-Control: no-store”來禁止緩存。下次是緩存列表中打開的緩存:
如果瀏覽器中有緩存則執行(b)步驟,查看緩存是否過期,主要是通過緩存中存儲的響應頭信息中的緩存標識字段 Expires 或 Cache-Control 來驗證緩存資源是否過期。Expires 是服務器端在響應請求時用來規定資源的失效時間。Cache-Control 是服務器端在響應請求時用來規定資源是否需要被瀏覽器緩存以及緩存的有效時間等。Cache-Control 主要取值如下:
緩存的時效由max-age決定。在max-age設定的時間內對當前資源發起訪問后使用的都是瀏覽器內部的緩存!超過max-age設定的時間后瀏覽器會選擇使用協商緩存。
響應頭信息中的no-cahce,表示不使用強制緩存,直接進入協商緩存,請求頭信息中的no-cache,則表示要重新獲取請求,其作用類似于no-store,響應頭信息的no-cache和max-age=0和請求頭信息的max-age=0的作用是一樣的:都要求在使用緩存之前進行驗證。
Expires 是 HTTP 1.0 的字段,而 Cache-Control 是 HTTP 1.1 的字段,當 Expires 與 Cache-Control 同時存在時,Cache-Control 的優先級要高于 Expires。為了保證瀏覽器兼容,一般兩個字段后端都會同時返回給前端,若是命中緩存(即存在緩存資源并且緩存資源未過期),則瀏覽器響應 HTTP Status Code 200,并直接使用緩存資源作為返回結果,不需要發起 HTTP 請求,為強制緩存;若是存在緩存資源但緩存資源已過期,則進入下一步驟協商緩存
與(c)協商緩存相關的緩存標識字段是 Last-Modified 和 Etag。
Last-Modified 是服務器端在響應請求時用來說明資源的最后修改時間。與之對應的是 If-Modified-Since 字段,在協商緩存過程中,瀏覽器發送的 HTTP 請求中 Header 中會帶上 If-Modified-Since 字段,值為緩存資源 Last-Modified 屬性的值。
當服務器端接收到帶有 If-Modified-Since 的請求時,則會將 If-Modified-Since 的值與被請求資源的最后修改時間做對比。如果相同,說明資源沒有新的修改,則響應 HTTP Status Code 304,瀏覽器會繼續使用緩存資源;如果最后修改時間比較新,則說明資源被修改過,則響應 HTTP Status Code 200,并返回最新的資源。
Etag 是服務器端在響應請求時用來說明資源在服務器端的唯一標識。與之對應的是 If-None-Match 字段,在協商緩存過程中,瀏覽器發送的 HTTP 請求中 Header 中會帶上 If-None-Match 字段,值為該緩存資源 Etag 屬性的值。
當服務器端接收到帶有 If-None-Match 的請求時,則會將 If-None-Match 的值與被請求資源的唯一標識做對比。如果相同,說明資源沒有新的修改,則響應 HTTP Status Code 304,瀏覽器會繼續使用緩存資源;如果不同,則說明資源被修改過,則響應 HTTP Status Code 200,并返回最新的資源。
Last-Modified 是 HTTP 1.0 的字段,而 Etag 是 HTTP 1.1 的字段,當 Last-Modified 與 Etag 同時存在時,Etag 的優先級要高于 Last-Modified。Etag 的出現主要是為了解決 Last-Modified 存在的問題。
最后,最新請求下來的資源,瀏覽器會根據Expires 與 Cache-Control判斷是否進行緩存。
<完>
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/53951.html
摘要:協商緩存用戶發送的請求,發送到服務器后,由服務器判定是否從緩存中獲取資源。如果想主動清除緩存,也可以在請求頭信息中加入來禁止緩存。主要取值如下緩存的時效由決定。是的字段,而是的字段,當與同時存在時,的優先級要高于。 在講這幾個屬性之前,先復習下瀏覽器的緩存機制,再結合了解一下Last-Modified / If-Modified-Since、Etag / If-Match、cache-...
閱讀 2461·2021-11-22 15:35
閱讀 3756·2021-11-04 16:14
閱讀 2685·2021-10-20 13:47
閱讀 2487·2021-10-13 09:49
閱讀 2064·2019-08-30 14:09
閱讀 2359·2019-08-26 13:49
閱讀 879·2019-08-26 10:45
閱讀 2762·2019-08-23 17:54