HTTP缓存可以分为两种:
- 强制缓存
- 协商缓存
优先级: 强制>协商
强制缓存
有两个控制强制缓存的标头:
Cache-Control(HTTP1.1)- 其中有一个字段
max-age来设置缓存时间,单位是秒,表示可以缓存的最长时间,是一个相对值 - 如果不缓存的话,就有以下两个字段可以用
- no-cache: 可以存储在缓存中,但是每次重用缓存之前必须先与源服务器进行验证
- no-store: 不可以存储在缓存中
- 其中有一个字段
Expires(HTTP1.0)(过时)- 是一个日期,从该日期起缓存的资源不应再被视为有效,是一个绝对值。
- 正因为是一个绝对值,如果客户端修改了时间,那么Expires设置的日期就不准了,所以如果同时设置了
Cache-Control的max-age和Expires,那么max-age会覆盖Expires(max-age优先级更高)
Cache-Control: max-age=31536000
Expires: Mon, 25 Jun 2013 21:31:12 GMT
协商缓存
当缓存过期时,客户端需要向服务端重新发起请求,资源没更新时服务端返回304状态码,资源有更新时服务端返回新的Etag或者新的Last-Modified和200状态码。