【发布时间】:2012-04-27 09:32:43
【问题描述】:
当我在服务器上更新一个 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 的风险?
- 这是破解还是合法的解决方案?
- 有更好的解决方案吗?
【问题讨论】:
-
第二个问题:不,不是。事实上,它更像是一种约定(如果还没有的话)。
-
对于支持它的设备,您可以在清单文件上创建和管理时间(参见教程:html5rocks.com/en/tutorials/appcache/beginner)。然而,附加的时间戳被广泛使用,老实说可能是一个更好的解决方案。
标签: php css cakephp caching browser-state