快取策略之瀏覽器

weixin_34302561發表於2018-09-11

快取策略之瀏覽器

如果一份資源( html、js、css ),同時存放在本地快取、快取伺服器和源伺服器
本文主要探究瀏覽器如何獲取資源,歡迎關注 Git部落格倉庫

快取控制

用來確定請求和響應是否被快取

Cache-Control 描述
public 可以被任何物件快取
private 只能被單個使用者快取,代理伺服器不能快取
no-cache 快取資源,並立即過期
no-store 不快取響應和請求
max-age 設定快取的最大儲存時間

響應頭中 no-cache 和 max-age=0 和請求頭中 max-age=0,表現一致,需要向伺服器驗證,成功返回304,失敗返回200,重新下載資源
請求頭中 no-cache,則是向伺服器請求資源,返回 200。詳細機制看 Disambiguating Multiple Responses

過期機制

欄位 描述
Expires 設定資源過期的絕對時間,對比本地時間,即請求頭 Date
max-age 相對於請求時間,有效級高於 Expires
Last-Modified 資源最後修改時間

當快取過期前,從本地快取獲取資源,其次向快取伺服器獲取,過期後會向伺服器驗證

當 max-age 和 Expires 均沒有設定,則會採用啟發式過期時間 (Date - Last-Modified)* 10%

快取驗證

欄位 描述
ETag 文件唯一標示,用字串標示
if-None-Match 驗證ETag是否相同,優先順序高於if-Modified-since
if-Modified-Since 驗證資源在指定時間後是否修改

驗證通過後,當本地沒有快取,源伺服器返回 304 到快取伺服器,快取伺服器返回 200 到瀏覽器
因為,max-age 是相對於請求時間,所以快取的的過期時間相應延長

Vary響應

設定指定欄位,快取伺服器會對比上一次請求中的欄位,相同返回資源
Vary: User-Agent 可以區分瀏覽器版本
初次請求,快取伺服器為空,直接向源伺服器請求,在快取伺服器以指定UA儲存
再次請求,UA 不同,快取伺服器向源伺服器請求,再次指定UA儲存
發出請求,UA 相同,快取伺服器直接返回資源

相關連結

相關文章