强制缓存和对比缓存
- 强制缓存
若在有缓存,且未失效的情况下直接命中
没有缓存时,服务器将数据和缓存规则返回
Cache-Control头里的选项:
private: 客户端可以缓存
public: 客户端和代理服务器都可缓存
max-age=xxx: 缓存的内容将在 xxx 秒后失效
no-cache: 需要使用对比缓存来验证缓存数据
no-store: 所有内容不进行缓存
- 对比缓存
不管有没有命中都需要向服务器发出请求确认所需资源是否被更改
1. Last-Modified/If-Modified-Since
第一次请求时返回资源最后修改时间Last-Modified
第二次请求时如果有If-Modified-Since,则对比时间
a. 如果时间大于此If-Modified-Since,则说明资源变动,响应资源并返回200.
b. 如果时间小于等于If-Modified-Since,则说明资源无变动,响应304,浏览器继续使用原缓存
2. Etag/If-None-Match【优先级高于Last-Modified/If-Modified-Since】
第一次请求时返回资源标识Etag
第二次请求时如果有If-None-Match,则对比标识
a. 如果不同,说明资源变动,响应资源并返回200
b. 如果相同,说明资源无变动,响应304,浏览器继续使用原缓存
这些选项均存在于响应头和请求头中