如何以编程方式清空浏览器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,只是认为文件是如此新,他必须去得到它。
你可以使用这个CSS
, favicons
和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。