避免浏览器缓存更新

时间:2010-12-18 19:18:07

标签: php html browser-cache

阅读this question后,我想知道是否可以通过将我的应用程序版本附加到索引文件顶部的uri来阻止浏览器缓存....就像这样:

$revision = getRevision();
if($_GET['v'] != $revision){
  header('Location: index.php?v=' . $revision);
}

这会有用吗?

最终目标是重置整个缓存 - JavaScript, CSS, images - 当我推送更新时,最好是一个不错的小内容

2 个答案:

答案 0 :(得分:1)

如果页面本身被缓存,是的。您还必须对通过站点上的URL提供的任何images / css / js或外部文件执行此操作(假设您正在传递缓存标头,因此它们实际上已缓存)并且包含在该页面中,因为浏览器缓存所有可用的URL,它们不会被称为它们的页面组合在一起 - 它们都是独立的。因此,如果index.php包含IMG,那么即使您更改index.php?v = 1234,仍将从缓存调用IMG。您还必须在图像上添加?v = 1234,以便重新获取页面和图像。

版本系统通常会附加到可以修改的所有可缓存URL(如css和js),但希望在更新后立即失效。您通常会将“VERSION”附加到URL或“version = VERSION”以任何方式附加到所有URL(确保不会破坏URL参数)。

答案 1 :(得分:1)

是的,你可以;附加一个随机忽略的参数是一种打败缓存的经典方法。 您还可以使用标题:Cache-control: no-cacheExpires:确切地设置回来。