Web緩存與策略

Web緩存定義

Web緩存(或HTTP緩存)是用于臨時(shí)存儲(chǔ)(緩存)Web文檔(如HTML頁(yè)面和圖像),以減少服務(wù)器延遲的一種信息技術(shù)。Web緩存系統(tǒng)會(huì)保存下通過這套系統(tǒng)的文檔的副本;如果滿足某些條件,則可以由緩存滿足后續(xù)請(qǐng)求。

Web緩存會(huì)根據(jù)請(qǐng)求保存輸出內(nèi)容的副本,當(dāng)下個(gè)請(qǐng)求到來的時(shí)候,如果是相同的URL,則會(huì)根據(jù)緩存機(jī)制決定是否使用副本響應(yīng)訪問請(qǐng)求,或是向源服務(wù)器再次發(fā)送請(qǐng)求。

Web緩存分類

前向位置系統(tǒng)(接受者或客戶端)

前向緩存是Web服務(wù)器網(wǎng)絡(luò)外部的緩存,例如在客戶電腦、ISP或公司網(wǎng)絡(luò)上。網(wǎng)絡(luò)感知前向緩存就像一個(gè)前向緩存,但只緩存大量訪問的項(xiàng)目??蛻舳耍ㄈ缇W(wǎng)頁(yè)瀏覽器)也可以存儲(chǔ)網(wǎng)絡(luò)內(nèi)容以供重用。例如,如果按下后退按鈕,則可以顯示本地緩存版本的頁(yè)面,而不是發(fā)送到Web服務(wù)器的新請(qǐng)求。位于客戶端和服務(wù)器之間的Web代理可以通過評(píng)估HTTP頭來選擇是否存儲(chǔ)網(wǎng)頁(yè)內(nèi)容。

反向位置系統(tǒng)(內(nèi)容提供者或Web服務(wù)器端)

反向緩存位于一個(gè)或多個(gè)Web服務(wù)器和Web應(yīng)用的前端,加速來自互聯(lián)網(wǎng)的請(qǐng)求,從而減少Web服務(wù)器的高峰負(fù)載。內(nèi)容分發(fā)網(wǎng)絡(luò)(CDN)可以在整個(gè)網(wǎng)絡(luò)的各個(gè)點(diǎn)上保留網(wǎng)頁(yè)內(nèi)容的副本。搜索引擎也可能會(huì)緩存一個(gè)網(wǎng)站;它提供了一種從最近停機(jī)的網(wǎng)站檢索信息的方法,或者比點(diǎn)擊直接鏈接更快地檢索數(shù)據(jù)的方式。例如,Google就是這么做的。Google搜索結(jié)果中可以找到緩存內(nèi)容的鏈接。

Web緩存機(jī)制

Web的緩存機(jī)制.png

HTTP定義了三種控制緩存的基本機(jī)制:新鮮度、驗(yàn)證失效

新鮮度

允許不在源服務(wù)器上重新檢查的情況下使用一個(gè)響應(yīng),并且可以由服務(wù)器和客戶端來控制。例如,Expires響應(yīng)頭給出文檔過期的日期,而Cache-Control: max-age指示告訴緩存該響應(yīng)在多少秒內(nèi)保持新鮮。

驗(yàn)證

可用于檢查緩存的響應(yīng)是否過時(shí)之后仍然有效。例如,若響應(yīng)有一個(gè)Last-Modified頭,緩存可以使用If-Modified-Since頭來發(fā)出一個(gè)條件請(qǐng)求,來查看它是否已經(jīng)改變。ETag(實(shí)體標(biāo)簽)機(jī)制還允許強(qiáng)弱驗(yàn)證。

失效

通常是另一個(gè)請(qǐng)求通過緩存的一個(gè)結(jié)果。例如,如果與緩存的響應(yīng)關(guān)聯(lián)的URL隨后獲得POST、PUT或DELETE請(qǐng)求,則緩存的響應(yīng)將失效。

許多CDN和網(wǎng)絡(luò)設(shè)備制造商已經(jīng)用動(dòng)態(tài)緩存取代了這個(gè)標(biāo)準(zhǔn)的HTTP緩存控制。

Web緩存階段

強(qiáng)緩存(本地緩存)

瀏覽器發(fā)送請(qǐng)求前,會(huì)先去緩存里查看是否命中強(qiáng)緩存,如果命中直接從緩存中讀取資源,不發(fā)送請(qǐng)求到服務(wù)器,否則進(jìn)入弱緩存。

弱緩存(協(xié)商緩存)

當(dāng)強(qiáng)緩存沒有命中時(shí),瀏覽器會(huì)向服務(wù)器發(fā)起請(qǐng)求。服務(wù)器根據(jù)Request Header中的字段來判斷是否命中協(xié)商緩存。如果命中則返回304響應(yīng),但不會(huì)攜帶任何響應(yīng)實(shí)體,只是告訴瀏覽器可直接從緩存中獲取資源。如果本地緩存和協(xié)商緩存都沒有命中,則直接從服務(wù)器加載資源。

Web緩存位置

瀏覽器可以在內(nèi)存或硬盤中開辟一個(gè)空間用于保存請(qǐng)求資源副本。

內(nèi)存緩存(Memory Cache)

硬盤緩存(Disk Cache)

請(qǐng)求一個(gè)資源查找緩存優(yōu)先級(jí):
Service Worker > Memory Cache > Disk Cache > Push Cache

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容