强缓存
- Cache-Control/Expires:浏览器判断缓存是否过期,如果未过期直接使用强缓存。
- 首先Cache-Control的取值可以由多个值组成,每个值以逗号分隔:
- no-store,no-cache 禁止缓存
- public/private 公共缓存或者私有缓存,默认private
- must-revalidate 强制确认缓存
- max-age (seconds)最重要的,设置了过期时间,单位是秒 * Expires是个绝对时间,就是Date类型的时间点,过了这个时间点就表示资源过期 * Cache-Control的max-age 优先级是高于Expires的
协商缓存
当强缓存过期时使用协商缓存,协商缓存字段如下:
-
唯一标志方案:Etag(response携带) & If-None-Match(request携带,上一次返回的Etag值)
-
最后一次修改时间:Last-Modified(response携带) & If-Modified-Since(request携带,上一次返回的Last-Modified) !!!服务端根据这两组中对应的比较值判断 如果一致,则返回304通知浏览器使用缓存 如果不一致,则服务端返回新的资源(这个时候两组对应的字段值也就发生了变化)
!!!Last-Modified的缺点: * 周期性修改,内容未变时会导致缓存失效 * 最小粒度到s,s以内无法检测 !!!Etag的优先级是高于Last-Modified的