所谓强缓存可以理解为强制缓存的意思,即浏览器在访问某个资源时会判断是否使用本地缓存理已经存在的资源文件,使用本地缓存的话则不会发送请求到服务器,从而达到减轻服务器访问压力的作用,且由于直接从本地缓存读取资源文件,大大提高了加载速度
Cache-Control:max-age
属性
max-age代表缓存时间单位为毫秒,这里的数据换算过来就是一年,意味着在一年内浏览器不会再向服务器发送请求,使用缓存的话,状态码200后面会标明情况,像这样
当缓存时间到期后再次访问时,状态码200后面便没有括号内的内容了
Expires
字段,Expires是HTTP1.0的规范,Cache-Control是HTTP1.1的规范,。Expires返回一个具体的时间值,代表缓存的有效期,在该日期内浏览器不会向服务器发起请求,而是直接从缓存里获取资源 ,因为Expires参照的是本地客户端的时间,而客户端的时间是可以被修改的,所以会有误差产生的情况,这也是Expires的一个缺点,所以有了后来HTTP1.1规范的Cache-Control。另外Cache-Control的优先级要高于Expires,如果两者同时设置,会优先使用Cache-Control,而忽略掉Expires协商缓存是由粗武器来告诉浏览器是否使用缓存i资源,也就是浏览器每一次都要发送请求到服务器询问是否使用缓存
除了Etag之外,浏览器还有一个Last-Modified
的属性,t他是http1.0规范的,服务器返回Last-Modified,浏览器请求头对应携带的是If-Modified-since
与Etag不同的是,Last-Modified的值是一个时间值,代表文件的修改时间,服务器通过对比文件的修改时间是否发生改变来判断是否使用缓存,相比于Last-Modified,Etag的优先级更高,使用上也更精确一些
因为有时候会存在文件内容没有被改变,但文件的修改时间变更了,Last-Modified不一致所以服务器会重新返回资源文件,实际上还是可以继续使用缓存的
最后普及一下常用的缓存
总结一下: