29

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

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

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

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

并且请不要让我回到 w3c 关于现在允许哪些元元素的定义——我知道 HTML5 不包含cache-controlor元素Pragmameta

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

4

4 回答 4

36

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

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

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

缓存清单

# 缓存清单版本 1.0

# 没有缓存

网络:
*
于 2013-03-05T16:24:36.703 回答
4

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

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

于 2013-07-04T02:42:50.890 回答
4

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

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

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

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


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

于 2015-09-25T04:26:09.720 回答
0

先前的答案 可能无法始终如一地防止缓存或清除 chrome 中的现有缓存,但有一种解决方法。

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

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

<script type="text/javascript">
window.addEventListener('load', function (e) {
window.applicationCache.addEventListener('updateready', function (e) {
        window.location.reload();
    }, false);
}, false);
</script>
于 2015-10-05T15:38:03.960 回答