当我在服务器上更新CSS文件时,许多客户端浏览器会继续使用旧的缓存CSS文件加载页面相当长的时间。
在搜索了许多帖子并汇总不同的想法后,我提出了似乎是最简单和最便宜的方法。
在任何链接CSS文件的地方,将href附加上文件最后修改日期的时间戳,就像这样:
因此,CSS文件的链接末尾有一个额外的标签,但只要文件没有被修改,它就保持不变。这意味着浏览器将像往常一样将其缓存。但是,一旦文件被修改,链接将会改变,而浏览器也不会错过任何内容。
然而,使用这种方法仍然让人感到有点不妥,因为它并非用于其本意。发送的“消息”没有任何用处,除了识别其存在之外,消息的内容并不重要。
以下是我的问题:
1. 是否承认客户端从浏览器缓存中看到已过时的样式表(或JavaScript)的修订HTML存在风险? 2. 这是一种黑客行为还是合法解决方案? 3. 有更好的解决方案吗?
在搜索了许多帖子并汇总不同的想法后,我提出了似乎是最简单和最便宜的方法。
在任何链接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文件的链接末尾有一个额外的标签,但只要文件没有被修改,它就保持不变。这意味着浏览器将像往常一样将其缓存。但是,一旦文件被修改,链接将会改变,而浏览器也不会错过任何内容。
然而,使用这种方法仍然让人感到有点不妥,因为它并非用于其本意。发送的“消息”没有任何用处,除了识别其存在之外,消息的内容并不重要。
以下是我的问题:
1. 是否承认客户端从浏览器缓存中看到已过时的样式表(或JavaScript)的修订HTML存在风险? 2. 这是一种黑客行为还是合法解决方案? 3. 有更好的解决方案吗?