我有一个 javascript 文件,该文件在服务器上经常更新(每小时)。它是网站用户在网站中使用的插件。每天服务数百万次。
为了让用户获得最新副本,我使用标题:
cache-control: public,max-age=1800,stale-while-revalidate=3600, immutable
(Safari 不支持 stale-while-revalidate,因此会被忽略)。
更改文件时,除了 Safari 之外,所有浏览器都会在一小时内赶上,其中一小部分用户继续使用旧版本的文件(可能是几周前的文件)。 似乎是由返回用户引起的(进入网站的用户一周后返回)。
尽管设置了 max-age,Safari 仍使用旧版本的文件是否有任何原因?
请勿对发生更改的文件使用
immutable
。仅将其用于可以无限期存储的版本化资产。
各个浏览器实现可以独立决定将过时资产保留多长时间。
immutable
资产可能看起来只是因为浏览器决定删除过时的缓存文件而接收更新。
来自... https://simonhearne.com/2022/caching-header-best-practices/#2-immutable
不可变# 这些资源可以被浏览器无限期地存储,因为它们永远不会改变。将此用于版本化资产(例如 main.v123.min.css 或 main.min.css?v=123)。