服务工作者响应缓存标头

Dan*_*key 8 browser-cache service-worker

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

基本上在使用服务工作者时,是否完全绕过了http缓存?

那么我是否需要构建一个框架来处理资源过期/失效,就像我们常常使用的http缓存一样?或者我在说垃圾?

如果有人可以提供一些澄清,这将是非常有用的.我看到它的方式有3种可能的情况:

一个).网络请求=>服务工作者获取=>(浏览器缓存?)<=>服务器

B).网络请求<=>(浏览器缓存?)<=>服务工作者获取<=>服务器

C).网络请求=>服务工作者获取<=>服务器

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

我对此很好,只是希望它在我运行之前澄清并构建一个框架来阅读和尊重服务工作者中的缓存头.

Jef*_*ick 8

A)是正确的模型.如果服务工作者控制页面,则所有网络请求将fetch在咨询浏览器缓存或网络之前触发服务工作者的事件处理程序.

反过来,只要服务工作者发出网络请求,无论是显式通过fetch()还是隐式通过cache.add()/ cache.addAll(),都会首先查询浏览器的"传统"缓存以获得响应.只有在浏览器缓存中没有有效响应时,才会向服务器发出网络请求.

这有时对您有利,如果您不期望这种行为,有时可能会让您遇到微妙的错误.

https://jakearchibald.com/2016/caching-best-practices/上有一个非常详细的解释,特别是要避免的事情以及利用这种行为的方法.