当我更新服务器上的 css 文件时,许多客户端浏览器会在相当长的一段时间内继续使用旧的缓存 css 文件加载页面。
在搜索了许多帖子并将不同的想法放在一起之后,我想出了似乎是最简单和最便宜的方法。
在链接任何 css 文件的地方,附加href
文件最后修改日期的时间戳,如下所示:
<link rel="stylesheet" type="text/css" href="main.css?t=<?=filemtime('main.css')?>" />
我正在使用 CakePHP,所以我在布局文件中所做的是:
<? $t = filemtime(CSS . 'main.css'); ?>
<?=$html->css("schedule.css?t={$t}") ?>
所以css文件的链接末尾有一个额外的标签,但只要文件没有被修改,它就保持不变。这意味着浏览器将能够像往常一样缓存它。然而,一旦文件被修改,链接就会改变,浏览器不会错过任何一个节拍。
仍然使用这种方法,人们会因为将某些东西用于不打算使用的东西而感到有点肮脏。正在发送的“消息”没有任何用处,因为消息的内容很重要,除了识别它的存在。
以下是我的问题:
- 是否可以承认客户端存在从浏览器缓存中看到带有过期样式表(或 JavaScript)的修订 HTML 的风险?
- 这是黑客还是合法的解决方案?
- 有更好的解决方案吗?