前提知识
- 浏览器加载资源时先看是否命中强缓存,若命中则不会发送http请求直接使用本地资源
- 若未命中则发送http请求,看是否命中强缓存,若命中则不返回资源,使用本地资源,此时相应的状态码为304
- 若未命中强缓存则返回资源,此时相应状态码为200
强缓存:
-
expire:GMT格式 (过期日期) http1.0
-
cache-control: http1.1
— max-age=时间戳 (保质期)expire和cache-control同时存在时,cache-control优先级更高
协商缓存:
(1)http1.0
- last-modified: GMT格式 在响应头中,只精确到秒
- if-modified-since: GMT格式 在请求头中,(值和last-modified完全一样)
(2)http1.1
- Etag : 一个唯一标志 在响应头中
- if-none-match 一个唯一标志 在请求头中
(2)组能解决(1)解决不了的问题:
- 当服务器一些文件丢失后恢复,但文件完全没有修改,此时可以用缓存,但对于last-modified,最后修改时间已变,无法命中缓存;而Etag不会改变,可以命中缓存
- last-modified只能精确到秒,而etag文件一修改就会变化, 不会命中缓存,能得到最新数据。