HTTP 快取驗證

VitoLI發表於2018-08-29

快取驗證

坑:快取驗證的時機

  1. 在使用者點選重新整理按鈕時瀏覽器會進行快取驗證
  2. 被快取的response頭部包含"Cache-Control:must-revalidate"

ETags

作為快取的一種強校驗器,ETag 響應頭是一個對使用者代理(User Agent, 下面簡稱UA)不透明(譯者注:UA 無需理解,只需要按規定使用即可)的值。對於像瀏覽器這樣的HTTP UA,不知道ETag代表什麼,不能預測它的值是多少。如果資源請求的響應頭裡含有ETag, 客戶端可以在後續的請求的頭中帶上 If-None-Match 頭來驗證快取。

Last-Modified 響應頭可以作為一種弱校驗器。說它弱是因為它只能精確到一秒。如果響應頭裡含有這個資訊,客戶端可以在後續的請求中帶上 If-Modified-Since 來驗證快取。

當向服務端發起快取校驗的請求時,服務端會返回 200 ok表示返回正常的結果或者 304 Not Modified(不返回body)表示瀏覽器可以使用本地快取檔案。304的響應頭也可以同時更新快取文件的過期時間。

帶Vary頭的響應

Vary HTTP 響應頭決定了對於後續的請求頭,如何判斷是請求一個新的資源還是使用快取的檔案。

當快取伺服器收到一個請求,只有當前的請求和原始(快取)的請求頭跟快取的響應頭裡的Vary都匹配,才能使用快取的響應。

vary

使用vary頭有利於內容服務的動態多樣性。例如,使用Vary: User-Agent頭,快取伺服器需要通過UA判斷是否使用快取的頁面。如果需要區分移動端和桌面端的展示內容,利用這種方式就能避免在不同的終端展示錯誤的佈局。

Vary: User-Agent

複製程式碼

相關文章