【问题标题】:How to prevent html5 page from caching?如何防止html5页面缓存?
【发布时间】:2013-02-20 03:26:03
【问题描述】:

我将一个普通的 HTML 页面转换为具有响应式布局的 HMTL5/CSS3,并且出于安全原因(由安全人员规定),该页面不得缓存。

页面之前使用<meta http-equiv="Pragma" content="no-cache"><meta http-equiv="Expires" content="-1">来防止页面被缓存。

什么在 HTML5 中取代了这个? 如何防止 html 页面在客户端缓存?

我花了一周时间阅读清单文件,但它们似乎与我想要的完全相反,因为明确附加清单文件会导致附加到缓存的页面。

请不要让我回到 w3c 关于现在允许使用哪些元元素的定义——我知道 HTML5 不包括 meta 元素中的 cache-controlPragma

我需要知道它包含哪些内容会阻止页面被缓存。

【问题讨论】:

标签: html caching


【解决方案1】:

在代码的开头你需要使用这个:

<!DOCTYPE html>
<html manifest="manifest.appcache">
...

然后用这样的内容创建manifest.appcache

缓存清单 # 缓存清单版本 1.0 # 没有缓存 网络: *

【讨论】:

  • 要添加到@n1ckolas 答案,请查看w3.org/TR/html5/browsers.html#manifests 了解详情。
  • 谢谢,防止文件缓存的工作,但现在它会在 Firefox 中弹出一个信息栏,说明:“该网站要求将数据存储在您的计算机上以供离线使用。”这又与我想要发生的完全相反。非常烦人,对我们的新手用户来说不会太友好——我们迎合不精通互联网的医疗保健专业人员。无论如何要保留清单并放弃信息栏,或者这只是 Firefox 的方式?
  • 我不确定...您可以将其移至单独的问题中,我很高兴看到答案:)
  • 一个等效的解决方案是引用一个不存在的清单文件:&lt;html manifest="/doesnt-exist.appcache"&gt;,但这将显示在 chrome 开发者工具的控制台中。
  • 此功能已从 Web 标准中删除。尽管某些浏览器可能仍然支持它,但它正在被删除。尽可能避免使用它并更新现有代码;请参阅本页底部的兼容性表以指导您的决定。请注意,此功能可能随时停止工作。 developer.mozilla.org/en-US/docs/Web/HTML/…
【解决方案2】:

我非常不喜欢 appcache。它几乎工作得很好,但可能是一个真正的无情的痛苦。在进行一些代码重构时,我意识到注销后,我可以浏览回最后一页。当然,刷新浏览器会强制用户重新登录,但这是不希望的。

搜索并查看选项后,我开始有点沮丧。我不想使用 appcache。然后我意识到我的代码在销毁会话后重定向到登录页面并有了一个想法,如果我重定向到主页怎么办?瞧,页面已加载,会话检查(当然不存在),用户重定向到登录。问题解决了。

【讨论】:

    【解决方案3】:

    很长一段时间以来,我一直在为同样的问题苦苦挣扎。对我有用的东西——至少到目前为止——在 Chrome、FF 和 IE 中正在执行以下操作:

    1) 引用清单文件 &lt;html lang="nl" manifest="filename.appcache"&gt; 据我了解,这将缓存此 HTML 文档中的所有内容,因此需要一个清单文件来防止这种情况发生:

    2) 使用清单文件 filename.appcache,其内容基本如下:对于所有文件,不要从缓存中读取,而是从网络服务器中读取:

    CACHE MANIFEST
    # 2015-09-25 time 20:33 UTC v 1.01 
    NETWORK:
    *
    


    3) 需要第三步:每次您上传网站的(部分)更新时,也要更改清单文件,方法是更改​​评论中的日期和时间戳( #) 线。为什么?因为如果您不更改清单文件,它将不会被读取,它将默认为第 1 步,从而缓存并从缓存中读取。然而,manifest文件被改变的事实迫使manifest文件被再次读取,从而强制其中的“不从缓存读取而是从网络服务器读取”指令再次被应用。

    【讨论】:

      【解决方案4】:

      previous answer 可能无法始终如一地阻止缓存或清除 chrome 中的现有缓存,但有一种解决方法。

      1) 要清除 chrome 中的现有缓存,可能需要更新网站的所有文件(例如,通过链接到每个页面上的新 css 文件) 连同缓存清单的更新,在第二次访问页面时清除 chrome 中的现有缓存(因为页面呈现方式的“流程”:第一次访问页面时,浏览器读取并缓存 manifest ,同时从现有缓存加载。只有在第二次访问时,才会读取并应用新存储的更新 manifest)。

      2) 如果这些都没有帮助,可以在清单文件本身中包含一个脚本来检查新的清单,如果找到,重新加载它并使用新的清单。这成功了,并解决了我测试的所有剩余情况,这些情况下文件一直在 chrome 中持续缓存。我在 Jason Stimpel 的 this page 上找到了这个脚本。

      <script type="text/javascript">
      window.addEventListener('load', function (e) {
      window.applicationCache.addEventListener('updateready', function (e) {
              window.location.reload();
          }, false);
      }, false);
      </script>
      

      【讨论】:

        猜你喜欢
        • 2020-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-18
        • 2011-11-04
        • 2014-07-20
        • 1970-01-01
        相关资源
        最近更新 更多