Http Cache-Control 缓存策略问题,什么情况下设置 no-cache 会使得资源请求返回 200 (disk cache)?

15次阅读

共计 689 个字符,预计需要花费 2 分钟才能阅读完成。

表现出来是问题所述,我这里讲下复现(人工复现)路径:

我将系统部署回老版本 1.1.0,然后同事访问系统(为 1.1.0),我再部署新版本 1.2.0,同事 F5 刷新页面,访问系统。前端架构是用的微前端(老版本用的 micro-app,新版本用的 qiankun),获取子应用当然是微前端沙箱的 fetch(但是我理解这里都是没有影响的)。

重点来了:同事机器访问 1.1.0 后就相当于缓存住了,之后访问 1.2.0,子应用的资源是 fetch 200,disk-cache,然后请求头只有 Referer, User-Agent,响应头里有 Cache-Control no-cache Last-Modified, Etag,也就是 1.1.0 版本的子应用 entry(老的 html)

我本机无法复现,查看 nginx 日志,确实同事机器是只在访问 1.1.0 的时候打到日志,后面都是走的本机缓存,我无法理解的是为什么 no-cache 会表现出强缓存的现象?

我现在解决是先改了 html 策略为 no-store(而且吊诡的是,nginx 配置加了之后除了 Cache-Control no-cache 这一行,还多了一行 no-store,难以理解),然后子应用访问时加时间戳(主要解决问题是这个方式,其实标题问题没有解决)

我现在猜测是第一次访问时,不知道哪里的中间代理(中间人)加了强缓存(但是响应头的 Last Modified Etag 又是哪里来的?),或者用的东方通有什么 bug?(但配置文件跟 nginx 一样的)

测试浏览器都是 Chrome,本机是最新 110 版本的,复现同事版本分别是 122(最新)、96

想问问社区大佬原因或者排查思路?赐教

正文完
 0