这是我参与8月更文挑战的第28天,活动详情查看:8月更文挑战
浏览器的缓存策略
浏览器有两种缓存策略:一个是强缓存、另一个是协商缓存
强缓存
强缓存的优先级比协商缓存的优先级高,如果没有强缓存,就走协商缓存
强缓存有两种相应头:一个是Expires、还有一个是Cache-Control
Expires是绝对时间,服务器返回一个绝对时间,这个时间是缓存的过期时间:比如,现在是8月29号、返回的是8月30号是缓存结束的时间,如果缓存结束,需要再次请求服务器拿资源
Cache-Control是相对时间,服务器返回一个相对时间,比如,服务器返回了一个max-age:30000,这个意思是30000秒后,资源将会过期。
Expires是http1.0,现在的浏览器基本默认都是http1.1,默认是使用Cache-Control代替Expires 如果客户端与服务端的时间由于某些原因(时区不同;客户端和服务端有一方的时间不准确)发生误差,那么强制缓存直接失效
强缓存是这样的:第一次请求,服务器把Expires带在响应头,返回给客户端,客户端下一次请求的时候,就会把这个Expires带上在请求头,服务器看到,如果这个时间还是缓存时间内,就会告诉客户端使用缓存
协商缓存
协商缓存有两对相应头去做判断: Last-Modified/If-Modified-Since、Etag/If-None-Match
Last-Modified是文件最近改变的时间,他是秒级别的,也就是说,如果一秒内,文件有多次改变的话,它就不知道该用哪个了。
Etag是文件最近改变的一个唯一标识,只要文件改变了,就会更新这个唯一标识,所以这个会更精准一点
协商缓存是这样的:第一次请求,服务器把Last-Modified带在相应头,返给客户端,客户端第二次请求的时候,在相应头上带上If-Modified-Since,也就是第一次服务器返回的Last-Modified,先访问缓存数据库,看这个缓存是不是有效,如果失效了,则再次请求服务器,获取最新数据,如果还有效,则会返回304,直接使用缓存数据