【问题标题】:Update an html file so that the browser knows not use the one in the cache更新一个 html 文件,让浏览器知道不使用缓存中的那个
【发布时间】:2012-09-05 10:41:54
【问题描述】:

我认为我的 javascript 被缓存并且即使使用更新的版本标签也没有更新,例如:

<script type="text/javascript" src="lib/myScript.min.js?v=3"></script>

但我意识到问题在于我的 html 文件正在被缓存......所以浏览器甚至不知道有一个新的脚本文件。

我不想禁用缓存,但有没有办法让浏览器知道它没有最新的 html 文件? (这是我放在我的 html 文件中还是放在我的 apache2 服务器上的东西?)

【问题讨论】:

标签: html caching apache2


【解决方案1】:
<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
<meta http-equiv="pragma" content="no-cache" />

Answer 来自Using tags to turn off caching in all browsers?

【讨论】:

  • 谢谢 - 我想如果我想要某种程度的缓存,那么我可以设置一个 expires 标签在我预期的更新之前过期。
  • 这会停止缓存网站上的所有内容,如 javascript css 和图像吗?还是只是 html 页面?
  • 请注意,从 HTML5 开始,使用缓存控制 meta 标记是无效的。应该在 HTTP 响应标头中指定缓存控制。
【解决方案2】:

你可以试试这些元标记。我想它会解决你的问题。

<meta http-equiv='cache-control' content='no-cache'>
<meta http-equiv='expires' content='0'>
<meta http-equiv='pragma' content='no-cache'>

【讨论】:

    【解决方案3】:

    除了在 html 中显式编写之外,您实际上还有两个更好的选择:ETAGLast-Modified。如果您的 html 文件是静态文件,则默认情况下 apache2 将知道如何处理其缓存。如果是 php,那么你将不得不在你的代码中处理它,或者使用一些 php 框架。

    由于这两个头不是用html写的,浏览器不必下载整个HTTP响应,从而减少了流量。所以我建议你使用它们。

    我相信谷歌搜索可能会有所帮助。

    What takes precedence: the ETag or Last-Modified HTTP header?

    【讨论】:

    • 我可能选择的答案太快了...我不知道要搜索什么。仔细查看我的 apache 配置,我没有打开 mod_cache、mod_headers 或 mod_expires……但不太确定我需要哪个。我也刚找到mnot.net/cache_docs。谢谢!
    • 只需 google apache2、ETAG 和 Last-Modified 。这两个功能默认开启,你可以使用 wget/firebug 来显示标题。 wget --spider --server-response http://localhost/
    猜你喜欢
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    • 2019-07-05
    • 1970-01-01
    • 2013-03-03
    • 2017-09-18
    • 2012-01-28
    • 1970-01-01
    相关资源
    最近更新 更多