如何使工作箱缓存跨源响应?

Mor*_*eng 5 progressive-web-apps workbox

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

Service Worker 代码如下所示。

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()
);
Run Code Online (Sandbox Code Playgroud)

在页面中,来自相同来源资源的响应被缓存,但来自的响应https://a248.e.akami.net没有。

我的配置有问题吗?或者这是一个工作箱 3.0.0 错误?

Jef*_*ick 8

您的https://a248.e.akami.net服务器上是否启用了 CORS ?如果没有,您将返回不透明的响应,默认情况下,使用cacheFirst策略时不会缓存这些响应

如果您想在使用策略时选择缓存这些响应,则有一个使用配方处理第三方请求指南cacheFirst

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

出现这种情况时,在 localhost 中使用 Workbox v3 时,您还应该看到 JavaScript 控制台中记录的新警告,说明发生了什么。