天天看點

http 中的緩存

如何判斷緩存新鮮度

  • If-Modified-Since告訴伺服器, 在伺服器中的響應封包中有一個Last-Modified字段, 如果兩者一直則表示在浏覽器中緩存的檔案是最新的, 可以直接使用浏覽器緩存中的副本
  • If-None-Match字段告訴伺服器, 它的值為ETag的id号, 如果伺服器端的Etag的id号與這個字段一直則使用緩存中的資料, 傳回304

在request中有關cache的字段

  • Cache-Control: no-cache 不使用緩存
  • If-Modified-Since
  • If-None-Match
  • Cache-Control: max-age, 緩存檔案在浏覽器端緩存的時間

response中有關cache的字段

  • Cache-Control: public, 公有緩存
  • Cache-Control: private, 私有緩存
  • Cache-Control: no-store, 禁止使用緩存
  • Date: 響應發送的時間
  • Expires: 緩存失效的時間
  • Last-Modified: 伺服器端檔案的最後修改時間
  • ETag: "67adsfaf908", 和request中的If-None-Match進行比較, 如果一樣則讓浏覽器直接使用放在緩存中的資料

注意

  • 對于緩存有效的判斷, 先根據Cache-Control中的max-age判斷, 如果沒有這個key-value則通過Expires進行判斷

304響應過程

  • 浏覽器發送request給伺服器 -> 浏覽器先檢查在本地緩存中是否已經有了這個資源 -> 如果有了則擷取其中的If-Modified-Since, 構成響應封包, 發送給伺服器端 -> 伺服器端通過If-Modified-Since和響應的Last-Modified的值進行比較, 如果一緻則表示在浏覽器中緩存的資料就是最新的資料, 于是伺服器發送304狀态碼的響應 -> 浏覽器從本地緩存中擷取資源

繼續閱讀