我们知道,使用强缓存时,浏览器不会发送请求到服务端,根据设置的缓存时间浏览器一直从缓存中获取资源,在这期间若资源产生了变化,浏览器就在缓存期内就一直得不到最新的资源(这就是很多情况下服务器上资源已经更新了,我们在浏览器中却拿不到最新的资源的原因),那么如何防止这种事情发生呢?
我们可以通过在请求路径后加上时间戳,来更新页面中引用的资源路径,让浏览器主动放弃缓存,加载新资源。
加时间戳后的请求 URL 类似于 https://a.com/action/api/url?timestamp=1549954762183
,其中 ?timestamp=1549954762183
就是我们加的请求参数,1549954762183
是生成的时间戳,那么如何生成时间戳呢?
大概有以下三种方式:
let timestamp1 = Date.parse(new Date()) // 精确到秒
let timestamp2 = new Date().valueOf() // 精确到毫秒
let timestamp3 = new Date().getTime() // 精确到毫秒
加上时间戳后,每次的请求路径就不同了,所以每次都相当于是一个新请求,不会受之前强缓存的影响。
关于强缓存和协商缓存机制可以参考这篇文章:HTTP 强缓存和协商缓存