强缓存与协商缓存
强缓存
强缓存主要使用 Expires、Cache-Control 两个头字段,当二者同时存在时 Cache-Control 的优先级更高。当命中强缓存时,客户端不会再发送请求,而是直接从缓存中读取内容,并返回 HTTP 状态码200。
Expires
优点:
在过期时间以内,为用户省了很多流量。
降低了服务器重复读取磁盘文件的压力。
缺点:
缓存过期以后,服务器不管文件有没有变化,都会再次请求服务器。
缓存过期时间是一个具体的时间,这个时间依赖于客户端的时间,如果时间不准确或者被改动,缓存也会随之受到影响。
Cache-Control
Cache-Control 服务端参数:
max-age:缓存有效时间,是一个相对时间,比 Expires 表示的时间更精确。
s-maxage:用于表示 cache 服务器上(比如 cache CDN,缓存代理服务器)的缓存有效时间,并只对 public 缓存有效。
no-cache:不使用本地强缓存,需要使用协商缓存(下面展开)。
no-store:直接禁止浏览器缓存数据,每次用户请求该资源,都会向服务器发送请求,每次都会下载完整的资源。
public:可以被所有的用户缓存,包括终端用户和中间代理服务器。
private:只能被终端用户的浏览器缓存,不允许中间缓存代理进行缓存(默认的)。
Cache-Control 客户端参数:
max-stale: 5,表示当客户端到代理服务器上拿缓存时,即使代理缓存过期,但只要过期时间在 5 秒之内,还是可以从代理中获取的。
min-fresh: 5,表示代理缓存需要一定的新鲜度,不要等到缓存刚好到期再获取,一定要在到期前 5 秒之前获取,否则将获取不到。
only-if-cached:表示客户端只会接受代理缓存,而不会接受源服务器的响应。如果代理缓存无效,则直接返回 504(Gateway Timeout)。
协商缓存
Last-Modified 和 If-Modified-Since ,
Etag 和 If-None-Match 优先级更高
当命中协商缓存的时候,服务器会返回 HTTP 状态码304,让客户端直接从本地缓存里面读取资源。
浙公网安备 33010602011771号