browser-cache - Service Worker 响应缓存 header

标签 browser-cache service-worker

我试图弄清楚服务 worker 如何处理响应中的缓存 header 。我现在已经实现了几个服务 worker ,但从来不必担心缓存标题,项目应该缓存多长时间等等。我现在在企业生产站点上实现它,这些东西实际上很重要。

基本上在使用 Service Worker 时,是否完全绕过了 http 缓存?

那么我是否需要构建一个框架来处理资源过期/失效,就像过去为我们做的 http 缓存一样?还是我在胡说八道?

如果有人可以对此进行一些说明,那将非常有帮助。在我看来,有 3 种可能的情况:

一种)。网络请求 => Service worker fetch =>(浏览器缓存?)<=> 服务器

B)。网络请求 <=>(浏览器缓存?)<=> Service worker fetch <=> Server

C)。网络请求 => 服务 worker 获取 <=> 服务器

我已经在本地测试过了,似乎是 C)。是正确的实现,我们开发人员为此牺牲了缓存头/持续时间抽象来进行控制。

我对此很好,只是希望在我离开并构建一个框架来读取和尊重服务 worker 中的缓存 header 之前澄清一下。

最佳答案

A) 是正确的模型。如果 service worker 控制了一个页面,所有的网络请求都会触发 fetch在查询浏览器缓存或网络之前服务 worker 的事件处理程序。

反过来,任何时候 Service Worker 发出网络请求,或者明确地通过 fetch()或隐式通过 cache.add()/cache.addAll() ,首先会查询浏览器的“传统”缓存以获得响应。只有在浏览器缓存中没有有效响应时,才会向服务器发出网络请求。

这有时对您有利,如果您不期望这种行为,有时会使您暴露于微妙的错误。

https://jakearchibald.com/2016/caching-best-practices/ 上有关于这种交互的非常详细的解释。 ,专门涵盖things to avoidways to take advantage of this behavior .

关于browser-cache - Service Worker 响应缓存 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42301123/

相关文章:

angular - 服务 worker : fetch event listener is never triggered by HTTP GET requests to an API on Angular 7

javascript - 使用 Service Worker 离线处理文件上传

progressive-web-apps - Service Worker JavaScript 更新频率(每 24 小时?)

javascript - 服务 worker 缓存失败

javascript - 如果我存储缓存并且已达到缓存限制,会发生什么情况?

http - 避免缓存 http 响应

jquery - 防止 jQuery 缓存破坏在使用 `html(...)` 函数的 AJAX 回调期间加载的资源

android - WebView:以编程方式清除 Service Worker 缓存

google-chrome - 使用缓存放置 API 时资源的 "time cached"值不正确

node.js - 如何在 ExpressJS + NodeJS 中禁用网页缓存?