【每日一題】瀏覽器緩存

人生苦短,總需要一點(diǎn)儀式感。比如學(xué)前端~
瀏覽器緩存主要分為四個(gè)階段
強(qiáng)制緩存階段
協(xié)商緩存階段
啟發(fā)式緩存階段
緩存失敗階段
強(qiáng)制緩存階段
先在本地查找該資源,如果有發(fā)現(xiàn)該資源,而且該資源還沒(méi)有過(guò)期,就使用這一個(gè)資源,完全不會(huì)發(fā)送 http 請(qǐng)求到服務(wù)器。
判斷過(guò)期通過(guò)Expires(http1.1)或Cache-Control(http1.1)來(lái)判斷。具體可以看這篇文章:【每日一題】了解強(qiáng)緩存
協(xié)商緩存階段
如果在本地緩存找到對(duì)應(yīng)的資源,但是不知道該資源是否過(guò)期或者已經(jīng)過(guò)期,則發(fā)一個(gè) http 請(qǐng)求到服務(wù)器,然后服務(wù)器判斷這個(gè)請(qǐng)求,如果請(qǐng)求的資源在服務(wù)器上沒(méi)有改動(dòng)過(guò),則返回 304 Not Modified,讓瀏覽器使用本地找到的那個(gè)資源。
關(guān)于協(xié)商緩存的詳細(xì)知識(shí)請(qǐng)看這篇文章:【每日一題】你了解協(xié)商緩存嗎?
啟發(fā)式緩存階段
當(dāng)緩存過(guò)期時(shí)間的字段一個(gè)都沒(méi)有的時(shí)候,瀏覽器下次并不會(huì)直接進(jìn)入?yún)f(xié)商階段,而是先進(jìn)入啟發(fā)式緩存階段:它根據(jù)響應(yīng)頭中 2 個(gè)時(shí)間字段 Data 和 Last-Modified 之間的時(shí)間差值,取其值的 10% 作為緩存時(shí)間周期。
也就是說(shuō):當(dāng)存有 Last-Modified 字段的時(shí)候,即使是斷網(wǎng),且強(qiáng)緩存都失效后,也有一段時(shí)間是直接讀取緩存文件的。Etag 是沒(méi)有這個(gè)階段的。
緩存失敗階段
當(dāng)服務(wù)器發(fā)現(xiàn)請(qǐng)求的資源已經(jīng)修改過(guò),或者這是一個(gè)新的請(qǐng)求(在本來(lái)沒(méi)有找到資源),服務(wù)器則返回該資源的數(shù)據(jù),并且返回 200。
當(dāng)然這個(gè)是指找到資源的情況下,如果服務(wù)器上沒(méi)有這個(gè)資源,則返回 404。
所有《每日一題》的 知識(shí)大綱索引腦圖 整理在此:https://www.yuque.com/dfe_evernote/interview/everyday
你也可以點(diǎn)擊文末的 “閱讀原文” 快速跳轉(zhuǎn)
讓我們一起攜手同走前端路!
關(guān)注公眾號(hào)回復(fù)【加群】即可
