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

Tow*_*wer 112 javascript browser html5 caching

我正在寻找一种以编程方式清空浏览器缓存的方法.我这样做是因为应用程序缓存了机密数据,我想在你"注销"时删除它们.这可以通过服务器或JavaScript发生.当然,仍然不鼓励在外国/公共计算机上使用该软件,因为有更多的危险,如关键记录器,你不能在软件级别上击败.

Nul*_*ion 143

没有办法浏览器会让你清除缓存.如果可能的话,这将是一个巨大的安全问题.这可能很容易被滥用 - 浏览器支持这样一个"功能"的那一刻,我将从计算机上卸载它.

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

<meta http-equiv='cache-control' content='no-cache'>
<meta http-equiv='expires' content='0'>
<meta http-equiv='pragma' content='no-cache'>
Run Code Online (Sandbox Code Playgroud)

您可能还想考虑在表单字段上关闭自动完成,但我担心有一种标准的方法(请参阅此问题).

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

除非明确告知,否则使用SSL还会使某些浏览器使用缓存.看到这个问题.

  • 没有人愿意,因为显然这是不可能的.就像你不能在另一个源上运行脚本并不意味着你不能在你的源上运行脚本.如果你无法清除远程源上的缓存,这是合乎逻辑的,但为什么我不能清除原始缓存我正在执行代码?没有理由不这样做,所以我在寻找是否有解决方案,但看起来这是不可能的.如果你是如此好奇,我可以告诉你,我有一个大型的应用程序,有很多CSS,HTML和JS编译到大约6 MB. (26认同)
  • 也许我昨​​晚没有得到足够的睡眠,当一个网络应用程序可以清除(*不改变*)缓存时,它会以什么方式成为安全问题?你怎么能利用它? (17认同)
  • 请解释一下,无论实施如何,这都是一个安全问题?这可以安全地实施. (14认同)
  • 为什么我要清除我的网络应用程序的缓存以惹恼我的用户?我想这样做是为了清除缓存的私有数据的痕迹.如果我告诉浏览器不要缓存,那么每次加载页面时都必须请求兆字节的客户端数据,这是我不想要的. (8认同)
  • @rFactor那太过分了. (4认同)
  • 6MB?即使您有100个CSS文件,也应仅加载该页面所需的内容以最小化带宽. (2认同)
  • 您好 在某些情况下需要自动清除缓存。当 Web 应用程序处于开发阶段时,css、js 和 html 代码会不断变化。因此,每次进行更改并将代码更新到服务器时,想要查看更改的其他用户/团队成员必须手动清除缓存以查看更改。特别是图像、CSS 等的变化。如果最终用户每次都必须清除缓存,那就很烦人了。自动化我们希望通过元标记清除缓存。 (2认同)

Zea*_*apa 37

有可能,您可以简单地使用jQuery替换引用缓存状态的"元标记"和事件处理程序/按钮,然后刷新,简单,

$('.button').click(function() {
    $.ajax({
        url: "",
        context: document.body,
        success: function(s,x){

            $('html[manifest=saveappoffline.appcache]').attr('content', '');
                $(this).html(s);
        }
    }); 
});
Run Code Online (Sandbox Code Playgroud)

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

  • 服务人员无法在iPhone上工作,因此您必须在该处使用应用程序缓存 (2认同)

Joi*_*ish 16

使用html本身.可以使用一个技巧.技巧是将参数/字符串附加到脚本标记中的文件名,并在提交更改时更改它.

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

浏览器将整个字符串解释为文件路径,即使在"?"之后出现了什么.是参数.因此,现在发生的情况是,下次更新文件时,只需更改网站脚本标记中的数字(示例<script src="myfile.js?version=1.0.1"></script>),每个用户浏览器都会看到文件已更改并获取新副本.


小智 8

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


Mår*_*röm 8

您可以让服务器使用“清除站点数据”指令进行响应,指示用户代理清除站点本地存储的数据。

例如:

Clear-Site-Data: "cache", "cookies", "storage"
Run Code Online (Sandbox Code Playgroud)

该标头将指示用户代理清除所有本地存储的数据,包括:

  • 网络缓存
  • 用户代理缓存(如预渲染页面、脚本缓存等)
  • 饼干
  • HTTP 身份验证凭据
  • 源绑定令牌(例如通道 ID 和令牌绑定)
  • 本地存储
  • 会话存储
  • 索引数据库
  • Web SQL 数据库
  • 服务人员注册

fetch()您可以使用and do after发送请求location.reload()以重新启动。


kak*_*ion 6

在 Chrome 上,您应该能够使用基准测试扩展来执行此操作。您需要使用以下开关启动 chrome:

./chrome --enable-benchmarking --enable-net-benchmarking 
Run Code Online (Sandbox Code Playgroud)

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

chrome.benchmarking.clearCache();
chrome.benchmarking.clearHostResolverCache();
chrome.benchmarking.clearPredictorCache();
chrome.benchmarking.closeConnections();
Run Code Online (Sandbox Code Playgroud)

从上面的命令可以看出,它不仅会清除浏览器缓存,还会清除 DNS 缓存并关闭网络连接。当您进行页面加载时间基准测试时,这些非常有用。显然,如果不需要,您不必全部使用它们(例如,如果您只需要清除缓存而不关心 DNS 缓存和连接,则 clearCache() 就足够了)。


r.d*_*lic 6

您现在可以使用Cache.delete()

例子:

let id = "your-cache-id";
// you can find the id by going to 
// application>storage>cache storage 
// (minus the page url at the end)
// in your chrome developer console 

caches.open(id)
.then(cache => cache.keys()
  .then(keys => {
    for (let key of keys) {
      cache.delete(key)
    }
  }));
Run Code Online (Sandbox Code Playgroud)

适用于 Chrome 40+、Firefox 39+、Opera 27+ 和 Edge。

  • 最佳答案。工作完美 (2认同)

bdo*_*bro 6

这是如何使用Cache.delete()删除所有浏览器网络缓存的单行内容

caches.keys().then((keyList) => Promise.all(keyList.map((key) => caches.delete(key))))
Run Code Online (Sandbox Code Playgroud)

适用于 Chrome 40+、Firefox 39+、Opera 27+ 和 Edge。

  • 这仅适用于脚本(通常在 Service Worker 中)已使用 Cache API 显式存储的项目。它不允许访问浏览器的 HTTP(s) 缓存。 (15认同)

Jay*_*hah 5

location.reload(true); 将硬重新加载当前页面,忽略缓存。
Cache.delete()也可用于新的 chrome、firefox 和 opera。


raj*_*alx 5

最初,我尝试在HTML,JS中使用各种编程方法来清除浏览器缓存。在最新版的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>
Run Code Online (Sandbox Code Playgroud)

在Chrome,Firefox,Opera中经过测试

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