什么叫http缓存?
MDN给出的释义是:通过复用以前获取的资源,可以显著提高网站和应用程序的性能。Web利用缓存可以减少等待时间和网络流量,因此减少了显示资源表示形式所需的时间。通过使用HTTP缓存变得更加响应性。
从缓存的策略可以分为强缓存和协商缓存
1. 强缓存 强缓存顾名思义就是强制缓存,在服务端设置响应头里Expires字段,其值是一个时间格式的值,当客户端本地时间小于响应头字段Expires字段的value时间值后,就不会从服务器请求,而是读取本地缓存,如果大于这个值就会重新请求再次进行缓存操作。这样做的弊端是服务端跟客户端会存在时间偏差,所以Cache-Control字段出现了,它的取值范围为
private 私有
public 公共
no-store 不缓存
no-cache 强制进行协商缓存
max-gae=<seconds> 被缓存的最大时间设置
must-revalidate 验证方式
2. 协商缓存 协商缓存表示要不要缓存需要向服务器发一个请求,与服务器协商当前的缓存是否已经过期了,是否需要请求新的资源,一般有两种方式来设置:
通过last-modified字段来设置缓存
last-modified是一种弱校验(因为只能精确到秒),需要配合if-modified-since来使用,如果响应头里含有last-modified字段,客户端会在再次请求中携带if-modified-since字段,服务器就会去对比两个参数的值是否一致,如果不一致就进行新的请求,如果一致则返回304状态,客户端加载缓存的内容
ETags
是实体标签(Entity Tag)的缩写。ETag一般不以明文形式相应给客户端。子资源的各个生命周期中具有不同的值,所以ETag值的一旦变更说明资源状态已经被修改,如果资源请求的响应头里有ETags字段,客户端会在再次发送请求时携带if-none-match字段给服务器验证当前缓存是否过期,是否需要重新加载资源。