【问题标题】:I'm confused, how do I control cache so my clients can see website edits我很困惑,如何控制缓存以便我的客户可以看到网站编辑
【发布时间】:2010-05-06 18:52:42
【问题描述】:

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

【问题讨论】:

  • 在我的电子邮件回复中,我会提醒他们点击Control-F5 强制刷新并查看所有更改。

标签: caching http-headers


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    根据您的前端水平,您可能无权访问或没有兴趣修改标头。

    一个非常简单的解决方案是在更改资源时重命名它们。显然,每次更改时从“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 标头。

    【讨论】:

    • 我不怕创建一个 .htaccess 文件或使用一些 PHP。我喜欢你为文件描述的方法,但是它本身的 HTML 页面呢?我不能更改文件名,因为它会损害 SEO。
    猜你喜欢
    • 2018-06-27
    • 1970-01-01
    • 2021-03-09
    • 2011-04-11
    • 2019-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    相关资源
    最近更新 更多