我很困惑,如何控制缓存,以便我的客户可以看到网站编辑

时间:2010-05-06 18:52:43

标签: caching http-headers

我为客户托管了大约10个网站。客户经常会要求更新他们的网站。它可能是简单的图像更改,新PDF或简单的文本更改。我进行了更改,然后通过更新向他们发送指向网页的链接。大约一个小时后,我将收到客户回复的电子邮件,告诉我他们仍然看到旧页面。然后我将向他们解释如何清空他们的浏览器缓存。我想弄清楚的是,如果有一种方法我可以告诉他们的浏览器我对网站进行了更新,并且它应该重新加载页面并更新缓存。我想过尝试一个元标记,但我读到它们不是很可靠。此外,我仍然希望页面缓存我只是希望能够在我进行更新时清除它。这可能吗?我是一个高级前端Web开发人员(HTML,CSS,Javascript)并且知道一些PHP。缓存只是其中一个我不太了解的事情。

2 个答案:

答案 0 :(得分:0)

根据您的前端情况,您可能无权访问或有兴趣修改标题。

一个非常简单的解决方案是在更改资源时重命名资源。显然每次改变都会从“image.jpg”转到“image2.jpg”,这将是一种难以维持的痛苦,取决于你的源代码控制,但是从“image.jpg?v = 1”到“image.jpg” ?v = 2“允许您保持文件名相同,同时强制浏览器和缓存中介重新加载资源。

通常的做法是使用文件的哈希值作为参数,因此每次文件更改时都不必记住增加它。

对于您的HTML文件,简单的解决方案根本不是缓存它。我假设每次查看都不会重新生成它,所以添加标题应该不是问题。

添加Cache-Control标头和Expires标头。他们应该一起阻止所有浏览器和中介缓存html文件,每次都强制重新加载:

<?php
  header("Cache-Control: no-cache,no-store,must-revalidate");
  header("Expires: 0");
?>

在输出任何页面数据之前,只需确保您的header()调用,因为需要在发送任何页面之前发送HTTP标头。

答案 1 :(得分:0)

不确定服务器端命令是否清空用户缓存...但希望客户端足够聪明,可以让他们的互联网设置在每次访问页面时检查新版本。