当前位置: 首页 > 知识库问答 >
问题:

覆盖PWA服务工作者中的浏览器缓存

暨曾笑
2023-03-14

我正在使用“缓存”将我的PWA资产缓存到service worker中,并使其脱机可用。

当我改变一个资产,特别是一个js文件,我修改至少一个字节在我的服务工作人员触发其本机更新:服务工作人员更新和检索所有以前缓存的资产,以刷新其缓存。

然而,服务器以文件的缓存版本响应,尽管我拥有所服务的文件,但我无法控制缓存控制http头。

如何防止在服务工作者缓存的资源上进行浏览器缓存?使用

"?v="+version

后缀将不起作用,因为此版本无法传递给引用html文件中缓存文件的or或标记,html文件是静态的,缓存将无法识别和提供脱机未版本文件名。

由于“caches.addAll”不允许AFAIK以任何方式将http请求头(如缓存控制)指定为fetch或XMLHttpRequest所做的,我如何防止在我的资产上进行额外的攻击性缓存阶段?

我使用的是纯Javascript,如果可能的话,我需要在没有任何附加库的情况下完成它。还请注意,meta http equiv标记不会解决除完整html之外的资产的问题。

共有1个答案

鲜于凯歌
2023-03-14

通过将缓存属性设置为适当的缓存模式,显式构造请求对象,可以绕过浏览器的缓存<代码>'reload'是一个很好的选择,因为它将绕过浏览器缓存处理传出的请求,但它将使用响应更新浏览器缓存(因此您将拥有更新鲜的浏览器缓存)。如果您甚至不想执行更新,可以使用“no-store”

下面是一些代码,展示了如何简洁地对可以传递到cache.addAll()的URL数组执行此操作:

async addAllBypassCache(cacheName, urls) {
  const cache = await caches.open(cacheName);
  const requests = urls.map((url) => new Request(url, {
    cache: 'reload',
  }));
  await cache.addAll(requests);
}
 类似资料:
  • 我使用带有sw工具箱库的service worker。我的PWA缓存除API查询(图像、css、js、html)之外的所有内容。但是如果有一天某些文件会被更改呢。或者如果服务人员。js将被更改。应用程序应该如何知道文件中的更改? 我的服务人员。js: 我不知道在PWA中更新缓存的常用方法是什么。也许PWA应该在后台发送AJAX请求并检查UI版本?

  • 我正在使用Service Worker创建一个渐进式Web应用程序,我正在使用Service Worker工具箱来缓存我的内容。Service Worker代码来缓存我的内容: 代码运行正常,因为我在控制台上没有看到任何错误。但是我如何检查是否从云前或上面配置的网址的图像正在缓存和从缓存本身渲染。

  • 我试图将PWA添加到项目中,但未成功。服务工作者不会缓存服务器请求。请求地址未添加到缓存存储中。因此,脱机模式不起作用。 项目配置: vue水疗中心 使用axios库向服务器发出的请求 服务器响应不包含缓存控制标头 pwa是使用标准vue插件实现的:vue/cli插件pwa vue中的PWA配置。配置。js: 还有这个:浏览器中的开发者控制台-

  • 我建立了一个进步的网络应用,https://www.tavest.com.我不明白为什么我的服务人员也被缓存在Chrome中?https://www.tavest.com/service-worker-tavest.js因此,当我更改服务人员时,chrome没有检测到更改,因此服务人员没有更新。 尽管我刷新了很多次页面,它仍然是一样的。然而,在Mozilla中,它工作得很好。这是我安装服务人员的代

  • 问题内容: 我想通过拦截文档对象(而不是accesskey属性)的keypress事件处理程序,来为Web应用程序中的几个页面添加对键盘快捷键的支持。 问题是,每个浏览器都有自己的组合键,因此不可能拿出一套键盘组合可在所有网络浏览器的工作,但一致的。(例如,它会是愚蠢的,如果在保存快捷为++ ,而一个要删除的是+ 。) 因此,我认为在我的几个页面中完全覆盖浏览器快捷方式会更简单。 撇开所有不利因素

  • 因此,我有一个带有服务工作者的HTML页面,服务工作者缓存索引。html和我的JS文件。 问题是当我更改JS时,更改不会直接显示在客户端浏览器上。当然,在chrome开发工具中,我可以禁用缓存。但是在Chrome Mobile,我该怎么做呢? 我试图访问站点设置并点击CLEAR%RESET按钮。但它仍然从缓存加载旧页面/加载。我试图使用其他浏览器或铬隐姓埋名,它加载新的页面。 然后,我尝试清除我的