知識分享!瀏覽器緩存機制
概述
緩存策略
瀏覽器緩存策略分為兩種:
強緩存
協(xié)商緩存
相同點
如果命中,都是從緩存中加載資源
不同點
協(xié)商緩存會向服務(wù)器發(fā)起請求去驗證是否命中緩存,而強緩存不需要發(fā)送請求
基本原理
瀏覽器加載資源時候,會根據(jù)請求頭的expire和cache-control判斷是否命中強緩存,是則從緩存中讀取資源,不會發(fā)送請求到服務(wù)器
如果沒有命中強緩存,瀏覽器就會攜帶
if-None-Match
:上一次Etag
的值和if-Modified-Since
: 上一次last-modified
的值,發(fā)送請求到服務(wù)器,驗證是否命中協(xié)商緩存,如果命中,則繼續(xù)從緩存中讀取資源如果沒有命中緩存,則直接從服務(wù)器加載資源

強緩存
Expires

Expires
是HTTp/1.0
控制網(wǎng)頁緩存的字段,其值是服務(wù)器返回改請求結(jié)果緩存的到期時間,是個絕對時間。
Expires控制緩存的原理,是使用客戶端的時間與服務(wù)器端返回的時間做對比,如果客戶端與服務(wù)器端的時間發(fā)生誤差(如時區(qū)不同,修改了客戶端時間),那么強緩存就會失效。
Cache-Control

主要取值

瀏覽器緩存存放位置

內(nèi)存緩存
內(nèi)存緩存具有兩個特點:
快讀讀取: 內(nèi)存緩存會將編譯解析后的文件直接存入改進程的內(nèi)存中,占據(jù)該進程一定的內(nèi)存資源,方便下次運行使用時的快速讀取
時效性: 一旦該進程關(guān)閉,則該進程的內(nèi)存會清空
硬盤緩存
硬盤緩存是直接將緩存寫入硬盤中,讀取緩存需要對該緩存存放的硬盤文件進行I/O操作,然后重新解析該緩存內(nèi)容,讀取復(fù)雜,速度比內(nèi)存緩存(memory cache)慢
協(xié)商緩存
協(xié)商緩存就是強制緩存失效后,瀏覽器攜帶緩存標(biāo)識向服務(wù)器發(fā)起請求,由服務(wù)器根據(jù)緩存標(biāo)識決定是否使用緩存。
控制協(xié)商緩存的字段分別為: Last-Modified/if-Modified-Since
和 Etag/if-None-Match
其中 Etag/if-None-Match
的優(yōu)先級更高
Last-Modified / if-Modified-Since
Last-Modified
是服務(wù)器響應(yīng)請求時,返回該資源文件在服務(wù)器最后被修改的時間

當(dāng)服務(wù)器收到該請求,并且發(fā)現(xiàn)請求頭有if-Modified-Since
字段時,就會將該值與該資源在服務(wù)器的最后修改時間做對比,如果有更新就重新返回資源,狀態(tài)碼為200;如果沒有更新,則返回304,繼續(xù)使用緩存文件
Etag / If-None-Match
Etag
是服務(wù)器響應(yīng)請求時,返回當(dāng)前資源文件的一個唯一標(biāo)識(由服務(wù)器生成)

當(dāng)服務(wù)器接收到請求,并且發(fā)現(xiàn)請求頭有If-None-Match
時,就會將該值與資源在服務(wù)器的Etag
值做對比,一致則代表資源沒有更新,返回304,使用緩存文件;不一致則重新返回資源文件,狀態(tài)碼為200
禁止瀏覽器緩存

了解更多,請點擊:https://www.bilibili.com/video/BV13p4y167vu
原作者:阿婧
原出處:掘金
原文鏈接:https://juejin.cn/post/6909739162463633415