服务器向游览器发送的数据可能存在过期,所以就出现了强缓存和协商缓存,目的就是为了减轻服务器的压力。
强缓存
强缓存就是缓存没有过期,浏览器直接从缓存中去取数据。
协商缓存
协商缓存就是缓存过期了,浏览器要和服务器商量缓存过期后,我们还可以使用缓存吗?是不是要返回新的数据?如果服务器返回的是304状态码就是缓存没有过期,还可以使用。如果是200状态码,说明缓存中的数据已经过期了。
协商缓存有三种解决方案
1.expires
expires返回的是过期时间,但是由于浏览器发送请求的时候,返回的是服务器的时间,这里有个问题就是expires时间是服务端返回的,我们对比的确是浏览器端。在时间上不一致(因为我们是从后端返回的数据,如果后端返回的数据变化了,缓存对比前端的expires时间却是没有变化,这时候浏览器拿到的就不是最新的数据了。)
所以有了第二个方案
2.Cache-control
Cache-control(在http1.1引入的)采用的是过期时长并且是以秒进行对比的,所以会出现不准确的情况,因为服务器的资源有可能会在0.x秒发生变化。
这个是Cache-control的其它常用指令的作用。
所以有了第三个方案
下面是协商缓存的最终解决方案(Etag)
eTag返回文件内容唯一标识,对比的是以毫秒进行的,浏览器既能从缓存中拿到最新的数据之后,服务端的请求压力也会减小。
视频地址是