Http緩存控制

緩存機制

網(wǎng)絡(luò)鏈路是影響數(shù)據(jù)傳輸最主要的因素,充分利用緩存從本地獲取數(shù)據(jù)可以極大提升性能。

簡單而言,瀏覽器請求一個資源,沒有緩存時發(fā)送請求。服務器返回資源,瀏覽器緩存并使用。后續(xù)再次請求該資源時即可直接使用緩存資源。

實際的緩存策略更加全面、復雜。

Cache-Control字段

瀏覽器和服務器都可用,用來協(xié)商緩存資源的細節(jié)。

除此之外,還有代理服務器場景也有獨特的機制和字段,暫不論及。

字段值

字段的值可用來標記資源的過期時間和緩存性等。

max-age:緩存資源的生存時間,從響應報文離開服務器開始計時。格式為:Cache-Control:max-age=30,表示緩存資源的生存時間為30s。

其他常見關(guān)鍵字

  • no_store:表示禁止緩存。用于更新頻率較快的資源。
  • no_cache:表示可以緩存,在使用前需向服務器驗證資源是否過期。
  • must-revalidate:表示在緩存生存時間內(nèi),可直接使用資源,生存時間之后使用需向服務器驗證是否過期。用于更新頻率較慢的資源。

瀏覽器可在請求中包含標準的緩存請求指令與服務器協(xié)商,但最終返回資源的緩存細節(jié)由響應報文中緩存響應指令決定。

緩存驗證

常見的情景,瀏覽器已經(jīng)有緩存資源,在下次請求時,需向服務器驗證是否過期。

弱驗證

在時間粒度上的驗證,之前響應報文如果有l(wèi)ast-modify字段,可在后續(xù)請求時帶上if-modify-since,其值為last-modify的值,再由服務器判斷之前到目前資源是否更新。

無更新時,返回狀態(tài)304 not modify。有更新時,返回更新的資源。

強驗證

上述時間粒度上的驗證在更新頻率較高時有明顯缺點??蓪γ看胃碌馁Y源添加唯一標識。

響應報文中添加Etag(主體標簽)字段,請求報文中添加if-none-match,其值為Etag值。

可匹配到時,說明資源未過期;匹配不到時,返回更新的資源。

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

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