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

使用工作箱运行时缓存,请求不会显示在chrome上的缓存存储中

归俊
2023-03-14

我使用workbox运行时缓存来缓存外部调用(materialize.css就是其中之一)。在“我的网络”选项卡中,它显示请求来自serviceWorker(看起来不错):

但是在缓存存储上,我的运行时缓存看起来是空的:

你可以在chromes的应用标签上看到我的服务人员,这是网站:https://quack.surge.sh/

服务工作者代码:

const workboxSW = new self.WorkboxSW();
workboxSW.precache(fileManifest);
workboxSW.router.registerNavigationRoute("/index.html");workboxSW.router.registerRoute(/^https:\/\/res.cloudinary.com\/dc3dnmmpx\/image\/upload\/.*/, workboxSW.strategies.cacheFirst({}), 'GET');
workboxSW.router.registerRoute('https://cdnjs.cloudflare.com/ajax/libs/materialize/0.100.2/css/materialize.min.css', workboxSW.strategies.cacheFirst({}), 'GET');
workboxSW.router.registerRoute('https://res.cloudinary.com/dc3dnmmpx/image/upload/(.*)', workboxSW.strategies.cacheFirst({}), 'GET');

这是预期的行为吗?我对服务人员还很陌生,我不确定什么是正确的结果。

共有1个答案

倪风史
2023-03-14

潜在的问题是这些是不透明的响应,默认情况下,它们不会与< code>cacheFirst策略一起使用。

https://workboxjs.org/how_tos/cdn-caching.html 有一些背景

Workbox中有日志记录来帮助调试这类事情,但由于它很嘈杂,在生产构建中默认情况下不启用它。切换importScripts()以使用开发版本(例如ImportScrits())https://unpkg.com/workbox-sw@2.0.3/build/importScripts/workbox sw.dev.v2.0.3js'),或进入DevTools并显式设置workbox。LOG_LEVEL='debug'将为您提供如下日志消息:

您有几个选项可以让事情按照您的期望运行:

  • 更改为 workboxSW.strategies.staleWhileRevalidate(),默认情况下支持不透明响应。
  • 告诉 cacheFirst 策略,你可以使用不透明的响应:workboxSW.strategies.cacheFirst({cacheableResponse: {statuses: [0, 200]}})
  • 由于您的第三方 CDN 似乎都支持 CORS,因此您可以通过 crossorigin 属性为 CSS 和图像请求选择加入 CORS 模式,并且响应将不再不透明:

 类似资料:
  • 请求缓存 支持请求缓存功能,支持对GET请求设置缓存访问,并设置有效期。 请求缓存仅对GET请求有效 有两种方式可以设置请求缓存: 路由设置 可以在路由规则里面调用cache方法设置当前路由规则的请求缓存,例如: // 定义GET请求路由规则 并设置3600秒的缓存 Route::get('new/:id','News/read')->cache(3600); 第二次访问相同的路由地址的时候,会自

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

  • 实现原理 实现参考『Thikphp 3.2-静态缓存』, 静态缓存只能提供HTML的缓存且只能以文件形式进行缓存。而请求缓存,支持ajax/html的缓存,而且可以根据缓存配置自行切换文件/redis的缓存 缓存检测: 行为app_begin时,检测路由是否需要有缓存,有则返回缓存内容(\Common\Behavior\ReadRequestCacheBehavior) 缓存更新: 行为ajax_

  • 我能够在非GUI centos/linux机器上以无头模式运行selenium。 我一直在尝试通过传递下面的chromeoptions参数来使用cache enable运行它。 chromeOptions。addArguments(“用户数据目录=~/.config/google chrome”); 它已经开始罚款和识别元素,直到登录页面(这是第一页),并且无法识别任何定位器之后。 运行启用缓存的

  • 问题内容: 我是angularJS的新手,对缓存等有疑问。 我有一个包含两个步骤的向导,我希望能够单击“返回”和“下一步”,并在用户拥有表单时仍然填写表单。 在我的page1Partial中,我有这个: 当我转到下一页时,请清除复选框,这是因为再次调用了我对Java服务的RESful调用。如何缓存此响应? 从我的控制器,这每次都会打到我的REST Web服务。 我的服务 问题答案: 从1.1.2(

  • 在我的项目中,我使用了一个@Cacheable注释ia一个服务方法,它返回涉及书籍和一些标记的计算结果,我想在一个@Controller类方法中退出缓存,该方法将一本新书添加到数据库中,因为这本新书将是新计算所必需的。 服务类:@Cacheable("metas") 控制器类:@RequestMapping@CacheEvict(value=“metas”,allEntries=true)