強緩存和協商緩存--終結篇

瀏覽器緩存是指瀏覽器在本地磁盤對用戶最近請求過的資源進行存儲。通過緩存,可以減少瀏覽器與服務器的通信次數,提升網站的性能。瀏覽器緩存分爲強緩存和協商緩存。

強緩存

介紹

瀏覽器在請求資源文件時,首先會判斷是否命中強緩存。根據該資源緩存的header信息,依據expires和cache-control字段判斷是否命中強緩存,若命中則直接從緩存中獲取資源,返回狀態碼200,不再繼續向服務器發起請求。

相關狀態碼

200

相關字段

Expries

該字段是http1.0時的規範,其值爲一個絕對時間的GMT格式的時間字符串,如Wen, 18 Mar 2020 17:25:00 GMT,如果發送請求的時間在該值之前,則判斷其命中強緩存。

Cache-Control

http1.1時的規範,該字段有五個相關屬性可設置:

max-age:其值爲一個數字,表示多少秒,代表緩存的最大相對時間。如設置Cache-Control:max-age=500,則從資源最後一次從服務器獲取的時間開始計算,500秒之後過期。

pubilc:瀏覽器和代理服務器都可以對資源進行緩存。

privite:只有瀏覽器可以緩存,代理服務器不能緩存。

no-cache:無法使用強緩存,可以使用協商緩存。

no-store:所有緩存都無法使用。

協商緩存

介紹

瀏覽器若沒用命中強緩存,則會繼續判斷是否命中協商緩存。若命中協商緩存,則返回狀態碼304,代表資源已存在,直接從緩存中取資源,不再向瀏覽器發起請求;否則,則會重新向瀏覽器請求資源。

相關狀態碼

304

相關字段

Etag/If-None-Match

Etag是一個資源唯一標識符,當資源發生改變該標識符就會變化,它是一個hash編碼值。當瀏覽器第一次訪問某個資源時,返回的資源會帶有一個Etag標識符,瀏覽器再次訪問該資源時,請求頭中會帶有一個If-None-Match的字段,它的值就是上次返回的Etag的值。然後將If-None-Match與新的Etag進行校驗看是否一致,若一致,若一致,則繼續判斷last-modefied是否一致;若不一致,則重新請求服務器資源。

Last-Modified/If-Modified-Since

Last-Modified是一個的GMT格式的時間字符串,表示資源最後修改時間。當瀏覽器第一次訪問某個資源時,返回的資源會帶有一個Last-Modified標識符,瀏覽器再次訪問該資源時,請求頭中會帶有一個If-Modified-Since的字段,它的值就是上次返回的Last-Modified的值。然後將If-Modified-Since與新的Last-Modified進行校驗看是否一致,則命中協商緩存。

Etag和Last-Modified區別
  1. Etag要優於Last-Modified。Last-Modified的時間單位最小是秒,如果某個文件在1秒內改變了多次,那麼他們的Last-Modified其實並沒有體現出來修改,但是Etag每次都會改變確保了精度。
  2. 在性能上,Etag要遜於Last-Modified,畢竟Last-Modified只需要記錄時間,而Etag需要服務器通過算法來計算出一個hash值。
  3. 在優先級上,服務器校驗優先考慮Etag。

驗證流程圖

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