如何防止html5页面缓存?

时间:2013-03-05 16:12:46

标签: html5 caching

我将简单的vanilla HTML页面转换为具有响应式布局的HMTL5 / CSS3,出于安全原因(由安全人员指示),页面绝不能缓存。

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

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

我花了一个星期阅读有关清单文件的内容,但它们似乎与我想要的完全相反,因为附加清单文件显式导致它附加的页面缓存。

请不要再回到w3c关于现在允许哪些元素的定义 - 我理解HTML5不包含cache-control元素中的Pragmameta

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

4 个答案:

答案 0 :(得分:35)

在代码的开头,你需要使用它:

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

然后使用以下内容创建manifest.appcache

CACHE MANIFEST

# Cache manifest version 1.0

# no cache

NETWORK:
*

答案 1 :(得分:4)

我不喜欢大量的appcache。它几乎运作良好,但可能是一个真正无情的痛苦。在做一些代码重构时,我意识到在注销后,我可以浏览回到最后一页。当然,刷新浏览器会强制用户返回登录,但这不是必需的。

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

答案 2 :(得分: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,从而缓存并从缓存中读取。但是,清单文件被更改的事实强制要再次读取清单文件,从而强制再次应用“不从缓存读取但从网络服务器读取”指令。

答案 3 :(得分:0)

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

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

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>