强缓存与协商缓存()

强缓存

强缓存主要使用 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,让客户端直接从本地缓存里面读取资源。

————————

强缓存

强缓存主要使用 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,让客户端直接从本地缓存里面读取资源。