【问题标题】:Change cachable content更改可缓存内容
【发布时间】:2011-01-26 10:12:58
【问题描述】:

如何更改可缓存的内容,以便用户立即获得刷新的版本?

我举个例子:我有一个可以缓存 2 周的 .css 文件,所以即使我更改它,用户仍然会得到旧版本,除非按 F5。

据我所知,有一些解决方案,但没有一个是完美的:

  • 更改文件名(从 main.css 到 main2.css)。
  • 添加唯一的 URL 参数(如 main.css?v=1)。

我认为这可以使用 apache eTags 以某种方式解决,我尝试过一次,但没有运气。

【问题讨论】:

    标签: html apache caching


    【解决方案1】:

    也许这很遥远,但弹跳 apache 不会清除它的缓存吗?

    类似:/usr/sbin/apachectl graceful 也许?

    更好的是,您是使用 apache 本身进行缓存,还是使用其他类似 squid 的东西?

    我“正常”运行 apache,当我更改 css 或其他文件(脚本之外)时,只需在我的浏览器中加载页面(例如通过单击“主页”按钮),浏览器 显示旧版本。有时即使我按下 F5 也是如此。我知道强制浏览器 真正 重新加载的唯一方法是使用 Ctrl-Shift-R (在 Windows 上)或 Cmd-Shift-R (Mac 操作系统)。

    【讨论】:

    • 这对我来说不是一个可行的解决方案,我为什么要为此重新启动 apache?另外,我在共享服务器上,所以这是不可能的。
    • 问题还在于我不能告诉网站的所有访问者都按Ctrl-Shift-R,因为我已经改变了样式。
    • @duality_ - 如果你不能让你的用户按下刷新,并且你不能反弹 apache 来清除它的缓存(尽管用户的浏览器缓存可能仍然阻碍你),那么我不知道该建议什么
    【解决方案2】:

    我认为最好的办法是使用第二个选项:在 URL 中添加一个参数。所以不要写css/main.css,只需写css/main.css?v=1,然后增加v(如版本)参数。我看到它一直在使用。

    有时会添加时间戳而不是版本,但请注意不要在每次访问页面时更改此时间戳,因为这会导致用户永远不会使用他们的缓存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-16
      • 1970-01-01
      • 2012-10-31
      • 2014-08-07
      • 2010-11-18
      • 2017-11-16
      • 1970-01-01
      • 2013-12-04
      相关资源
      最近更新 更多