HTTP緩存機(jī)制:強(qiáng)緩存和協(xié)商緩存
緩存可以減少網(wǎng)絡(luò)IO的消耗,提高訪問速度田藐。主要是獲取數(shù)據(jù)的方式荔烧,判斷是需要從服務(wù)端獲取數(shù)據(jù)還是使用自身緩存數(shù)據(jù),多數(shù)應(yīng)用于網(wǎng)路傳輸不穩(wěn)定的移動端汽久,或者數(shù)據(jù)相對固定的頁面鹤竭。在HTTP響應(yīng)Response的報文頭,通過請求頭中的標(biāo)志來判斷使用哪種數(shù)據(jù)獲取機(jī)制景醇,沒有標(biāo)志則發(fā)出請求獲得最新的數(shù)據(jù)臀稚。
響應(yīng)規(guī)則
通過Response響應(yīng)頭中的Cache-Control來配置緩存規(guī)則
public:所有內(nèi)容都將被緩存(客戶端和代理服務(wù)器都可緩存)
private:所有內(nèi)容只有客戶端可以緩存,Cache-Control的默認(rèn)取值
no-cache:客戶端緩存內(nèi)容三痰,但是是否使用緩存則需要經(jīng)過協(xié)商緩存來驗證決定
no-store:所有內(nèi)容都不會被緩存吧寺,即不使用強(qiáng)制緩存,也不使用協(xié)商緩存
max-age=xxx (xxx is numeric):緩存內(nèi)容將在xxx秒后失效
Expires也是控制緩存的配置項
配置Expires是為服務(wù)器返回該請求結(jié)果緩存的到期時間散劫,即再次發(fā)起該請求時稚机,如果客戶端的時間小于Expires的值時,直接使用緩存結(jié)果获搏,不過Cache-Control優(yōu)先級比Expires高赖条,且存在客戶端與服務(wù)端誤差問題會配置導(dǎo)致失效,所以主要還是使用Cache-Control配置緩存規(guī)則
內(nèi)存緩存和硬盤緩存(同時也需要考慮客戶端存儲方式)
- 內(nèi)存緩存(from memory cache)讀取速度更快,但進(jìn)程關(guān)閉纬乍,則該進(jìn)程的數(shù)據(jù)會清空碱茁。
- 硬盤緩存(from disk cache)速度比內(nèi)存緩存慢,進(jìn)程不會影響文件
靜態(tài)資源圖片和比較小的文件大多會默認(rèn)使用內(nèi)存緩存仿贬,瀏覽器可以更好的節(jié)省渲染成本纽竣,但大文件一般會寫入硬盤內(nèi)存,進(jìn)行I/O操作诅蝶,重新解析該緩存內(nèi)容退个。