问题发现
前端发现一个链接,重新打开后,发现页面并没有更新。
在电脑Chrome浏览器查看css文件和js文件,看到大多是200 from disk/memory,没有request header,说明走的是强缓存,不发送请求,直接从缓存里取。
缓存机制
浏览器先确定第一次资源请求,返回的response header,有没有cache-control,有的话并且设置了缓存,会进行强缓存。如果是no-cache,查看etag,或者last-modified,有二者之一的话,会进行协商缓存,下次请求会向服务器发起请求,若资源没变化,返回304响应和空响应体。
疑问点
如果第一次请求,没有设置cache-control,但是设置了etag,会有什么表现呢?会直接走协商缓存吗?
根据stackoverflow某一个问答,得知会进行强制缓存,但缓存时间会根据不同浏览器,有所不用。
比较神奇的一个现象是,第一次资源请求后,一直是使用200强制缓存。更新版本后,刷新后chrome很快会改为最新版本。而微信重新打开链接,不会发现改变,除非手动点击三个点,点刷新。在nginx增加 cache-control: no cache后,这才调整了微信强制缓存的表现。
深入理解浏览器缓存机制
What’s default value of cac. e-control?
微信,请不要缓存我的页面