如何以编程方式清空浏览器caching?

我正在寻找一种方式来编程清空浏览器caching。 我这样做是因为应用程序caching了机密数据,我想在按下“注销”时删除这些数据。 这将通过服务器或JavaScript发生。 当然,在外国/公共计算机上使用这个软件仍然是令人沮丧的,因为在软件层面上,像键盘logging器这样的危险更多。

有可能,您可以简单地使用jQuery来replace引用caching状态的“元标记”和事件处理程序/button,然后刷新,

$('.button').click(function() { $.ajax({ url: "", context: document.body, success: function(s,x){ $('html[manifest=saveappoffline.appcache]').attr('content', ''); $(this).html(s); } }); }); 

注:此解决scheme依赖于作为HTML 5规范的一部分实现的应用程序caching。 它还需要服务器configuration来设置应用程序caching清单。 它没有描述通过客户端或服务器端代码来清除“传统”浏览器caching的方法,这几乎是不可能的。

浏览器不会让你清除caching。 如果可能的话,这将是一个巨大的安全问题。 这可能会非常容易被滥用 – 浏览器支持这种“function”的那一刻就是我从计算机上卸载它的那一刻。

可以做的是告诉它不要caching你的页面,通过发送适当的标题或使用这些元标记:

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

你可能也想考虑closures表单字段的自动完成function,但恐怕有一个标准的方法来完成它( 见这个问题 )。

无论如何,我想指出,如果您正在使用敏感数据,您应该使用SSL。 如果您不使用SSL,任何有权访问networking的人都可以嗅探networkingstream量,并轻松查看您的用户所看到的内容。

除非明确告知,否则使用SSL也会使一些浏览器使用caching。 看到这个问题 。

最好的想法是使用js文件生成名称+一些哈希与版本,如果你确实需要清除caching,只需要生成新的哈希文件,这将触发浏览器加载新文件

使用HTML本身。有一个可以使用的技巧。诀窍是追加一个参数/string到脚本标签中的文件名,并在文件更改时更改它。

<script src="myfile.js?version=1.0.0"></script>

浏览器将整个string解释为文件path,即使“?” 是参数。 所以现在发生的情况是,当你下一次更新文件时,只需要改变你网站脚本标记的数字(例如<script src="myfile.js?version=1.0.1"></script> ),每个用户浏览器将会看到文件已经改变并抓取一个新的副本。

在Chrome上,您应该可以使用基准扩展来完成此操作。 您需要使用以下开关启动您的Chrome:

 ./chrome --enable-benchmarking --enable-net-benchmarking 

在Chrome的控制台中,您现在可以执行以下操作:

 chrome.benchmarking.clearCache(); chrome.benchmarking.clearHostResolverCache(); chrome.benchmarking.clearPredictorCache(); chrome.benchmarking.closeConnections(); 

从上面的命令可以看出,它不仅清除浏览器caching,还清除DNScaching并closuresnetworking连接。 当您进行页面加载时间基准testing时,这些function非常棒。 显然,如果不需要,你不必全部使用它们(例如,如果只需要清除caching而不关心DNScaching和连接,则clearCache()就足够了)。

最初我在我的html,JS中尝试了各种编程方法来清除浏览器caching。 在最新的Chrome上没有任何作用

最后,我结束了.htaccess:

 <IfModule mod_headers.c> Header set Cache-Control "no-cache, no-store, must-revalidate" Header set Pragma "no-cache" Header set Expires 0 </IfModule> 

经过Chrome,Firefox,Operatesting

参考: https : //wp-mix.com/disable-caching-htaccess/

想象一下.js文件被放置在/my-site/some/path/ui/js/myfile.js

所以通常脚本标签看起来像:

 <script src="/my-site/some/path/ui/js/myfile.js"></script> 

现在改成:

 <script src="/my-site/some/path/ui-1111111111/js/myfile.js"></script> 

现在当然是行不通的。 要使其工作,您需要添加一行或几行到您的.htaccess重要的行是:(整个底部的.htaccess)

 RewriteRule ^my-site\/(.*)\/ui\-([0-9]+)\/(.*) my-site/$1/ui/$3 [L] 

所以这是做什么的,它从path中删除1111111111并链接到正确的path。

所以现在如果你做了改变,你只需要将号码1111111111改成你想要的号码即可。 然而,你包括你的文件,你可以通过时间戳设置该数字,当最后修改js文件。 所以如果数字没有改变,那么caching将正常工作。 如果它改变,它会提供新的文件(YES ALWAYS),因为浏览器得到一个完整的新URL,只是认为文件是如此新,他必须去得到它。

你可以使用这个CSSfavicons和caching。 对于CSS就像这样使用

 <link href="http://my-domain.com/my-site/some/path/ui-1492513798/css/page.css" type="text/css" rel="stylesheet"> 

它会工作! 更新简单,维护简单。

承诺完整的.htaccess

如果你没有.htaccess但是这是你需要的最低限度:

 <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^my-site\/(.*)\/ui\-([0-9]+)\/(.*) my-site/$1/ui/$3 [L] </IfModule> 

location.reload(真); 将难以重新加载当前页面,忽略caching。
Cache.delete()也可以用于新的chrome,firefox和opera。