2.1 需求
有的静态资源会设置一个较长的缓存时间,但是我们希望用户还是能使用最新的资源。
2.2 解决方案
在打包完成的文件名上加上一串哈希码,这个哈希码是根据内容进行的哈希计算。 所以,如果你的内容文件没有变,那么这个hash码不会变,即这个静态资源的url没有变。 而如果内容有变,那么hash码也会变,浏览器就会去请求新的资源请求。
2.3 普通的缓存机制
2.4 资源验证
如果给Cache-Control设置了no-cache后,每次要使用资源时浏览器都要到服务器验证缓存是否过期。 如果直接使用缓存,返回码:304
2.5 如何验证资源是否过期:
Last-Modified(上次修改时间)
配合 If-Modified-Since 或 If-Unmodified-Since 使用
如果请求的资源头中有Last-Modified这个头,这个头指定了一个时间。那么浏览器重新访问资源时就会带上If-Modified-Since这个头,其时间是Last-Modified的时间,服务器就会拿这个时间去对比上次修改的时间,然后告诉浏览器是否可以直接使用。
Etag (数据签名)
资源会依据它的内容产生一个唯一的数据签名,如果资源有更新,那么Etag就会发生变化。
配合 If-Match 或 If-None-Match 使用