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

如何使workbox缓存跨源响应?

夏兴生
2023-03-14

根据 workbox 文档,应将跨域请求配置为确保正则表达式与 URL 的开头匹配。但是,它不起作用。

服务人员代码如下所示。

importScripts('https://storage.googleapis.com/workbox-cdn/releases/3.0.0/workbox-sw.js');

workbox.routing.registerRoute(
  /.*\.(png|jpg|jpeg|svg|gif)/,
  workbox.strategies.cacheFirst()
);

workbox.routing.registerRoute(
  new RegExp('^https://a248.e.akamai.net/.*'),
  workbox.strategies.cacheFirst()
);

在页面中,来自同源资源的响应被缓存,但来自< code > https://a248 . e . akami . net 的响应不被缓存

我的配置有什么问题吗?还是这是一个工作箱3.0.0错误?

共有1个答案

龙令
2023-03-14

您的< code > https://a248 . e . akami . net 服务器上是否启用了CORS?否则,您将得到不透明的响应,默认情况下,当使用< code>cacheFirst策略时,这些响应不会被缓存。

如果您想在使用<code>cacheFirst</code>策略时选择缓存这些响应,可以使用以下方法处理第三方请求:

workbox.routing.registerRoute(
  new RegExp('^https://a248.e.akamai.net/.*'),
  workbox.strategies.cacheFirst({
    plugins: [
      new workbox.cacheableResponse.Plugin({
        statuses: [0, 200]
      })
    ]
  }),
);

当出现这种情况时,在localhost中使用Workbox v3时,您还应该看到JavaScript控制台中记录了一条新的警告,解释了发生的情况。

 类似资料:
  • 我调用服务器数据通过使用ajax在index.html.它是完美的获取这些数据。现在,我正在和服务人员一起工作。我可以缓存所有的静态资产(图像,js,css),并在Chrome开发工具的应用程序选项卡中的缓存存储中检查这些缓存的资产。我可以在网络选项卡中看到这些资产也被缓存(磁盘缓存)。 现在,我想使用ServiceWorker缓存这些ajax响应(图像文件数组)。在“网络”选项卡中,我可以看到它

  • 我已经实现了Workbox,以使用webpack生成我的服务人员。这非常有效-我可以确认,在运行(package.json:)时,已在生成的服务工作人员中更新了

  • 我正在使用工作箱来缓存我的应用程序外壳。网络选项卡显示请求来自serviceWorker,并且资产在快速检索时肯定会被缓存,即使在离线模式下也是如此: 但是,缓存存储选项卡始终为空: 我试图通过控制台请求相同的资产: 瞧,资产显示: 我担心我错过了一些基本的东西。 顺便说一下,缓存存储在我的本地环境中显示正确,因此我怀疑这是来自CDN的资产的问题。

  • 警告是: jquery-1.9.1.js:8526跨源读取阻塞(CORB)阻塞跨源响应https://www.metaweather.com/api/location/search/?query=loMIME类型应用程序/json。有关更多详细信息,请参阅https://www.chromestatus.com/feature/5629709824032768。 我的代码是: 我试了4个小时,但没

  • 问题内容: 我想确保浏览器永远不会缓存服务器的响应,这样即使发出两个相同的请求(相隔一纳秒),也始终会与服务器联系。这是实现此目标的正确方法: 谢谢唐 问题答案: 不,那不是正确的方法。这是正确的方法: 您可能会看到其他人在建议其他条目/属性,但是当至少提及上述内容时,它们是完全不相关的。 更改后,请不要忘记在测试之前清除浏览器缓存。 也可以看看: 网站站长缓存教程

  • 问题内容: 我使用一些GeoIP服务在页面上放置国家/地区标记,具体取决于国家/地区IP。我需要为网站上的所有页面缓存JSON响应。 将此代码放入: 是否可以将其缓存?-似乎不起作用。 或者使用HTML5 localStorage可能更好,但是我不确定该怎么做。 我也尝试了JSONCache插件,但是对我来说不起作用。 问题答案: 您可以这样使用localStorage: 演示 因此,在您的特定情