【每日一題】瀏覽器緩存

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