請求資源流程
瀏覽器行為的影響
- 在瀏覽器輸入地址,然后回車:
會進行上述完整流程- f5刷新
則忽略資源有效時間,直接帶相關條件(If-None-Match ( If-Modified-Since))去請求服務器- ctrl+f5
忽略資源有效時間,忽略條件,直接請求服務器資源
cache-control
緩存驅逐
驅逐算法用于將陳舊的緩存副本替換為新鮮的,注意,一個陳舊的緩存是不會直接被清除或忽略的,當客戶端發起一個請求時,緩存檢索到已有一個對應的陳舊緩存,則緩存會先將此請求附加一個If-None-Match頭,然后發給目標服務器,以此來檢查該緩存是否是依然還是算新鮮的,若服務器返回了 304 (Not Modified)(該響應不會有帶有實體信息),則表示此資源副本是新鮮的,這樣一來,可以節省一些帶寬。若服務器通過 If-None-Match 或 If-Modified-Since判斷后發現已過期,那么會帶有該資源的實體內容返回。
vary
vary會指定一個字段,只有請求頭中的這個字段與緩存資源中的這個字段相同時,才會返回緩存資源,否則請求服務器。
用vary頭有利于內容服務的動態多樣性。例如,使用Vary: User-Agent頭,緩存服務器需要通過UA判斷是否使用緩存的頁面。如果需要區分移動端和桌面端的展示內容,利用這種方式就能避免在不同的終端展示錯誤的布局。
加速資源
一些長期不更新的文件,緩存時間會很長,更新它們也很有難度。在這些資源名稱后面加入版本號,可以解決此問題
max-age expires
max-age 表示緩存資源的有效時間
expires 表示緩存自愿的到期時間
如果兩個值同時存在,那么max-age優先級更高
etag
一般是一個文件的散列值,即文件的md5簽名,用于對比顯示文件是否有變化
Last-Modified
一個文件上次修改的時間