前言
http 缓存对于一个系统的性能提升非常重要,但是又特别容易被忽视。
强制缓存
Expires
Expires存在于响应header中,值为资源的到期时间。Expires属于 http 1.0 ,由于浏览器的时间容易存在误差,从而导致缓存的命中误差,所以就不要使用了。
Cache-Control
Cache-Control存在于响应header中。Cache-Control的值有:private,public,no-cache,max-age,no-store,还有一个不常用的值:must-revalidate。
private:只有客户端可以缓存;
public: 客户端和代理服务器都可以缓存;
no-cache: 使用对比缓存规则(下面会介绍);
max-age: 缓存的内容多少秒后过期;
no-store: 不使用缓存;
must-revalidate: 验证过期后的缓存(在http协议规范中,允许客户端在某些特殊情况下直接使用过期缓存,must-revalidate 可以排上用场);
强制缓存的优先级高于对比缓存;Cache-Control 的优先级高于 Expires。
对比缓存
Etag 和 If-None-Match
Etag存在于响应header中,值为服务器计算出来的一个字符串。服务器资源有修改时,Etag值不相同。If-None-Match存在于请求header中,值为上一次访问该资源的响应header中的Etag的值。
Last-Modified 和 If-Modified-Since
Last-Modified存在于响应header中, 值为资源的最后修改时间。If-Modified-Since存在于请求header中,值为上一次访问该资源的响应header中的Last-Modified的值。
Etag 的优先级高于 Last-Modified。
其他
欢迎大家关注微信公众号:赵公子聊前端。