http 中的緩存
阿新 • • 發佈:2018-10-24
文件 就是 expires o-c 過程 mat 時間 比較 判斷
如何判斷緩存新鮮度
- 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狀態碼的響應 -> 瀏覽器從本地緩存中獲取資源
http 中的緩存