服务人员可以访问浏览器缓存吗?

时间:2019-07-25 15:29:26

标签: javascript service-worker browser-cache cachestorage

我还没有找到明确的答案,但是从我的实验中可以看出以下事实:

服务人员无法访问或控制传统的浏览器缓存。这是故意的吗?有没有办法做到我还没有发现?

当我说“浏览器缓存”时,我不要是指CacheStorage API。我确实知道服务工作者可以完全访问CacheStorage API。我的意思是,当浏览器开发工具的网络选项卡中的请求说“来自内存缓存”而不是“来自服务工作者”或仅来自实际网络请求时,将使用缓存。

1 个答案:

答案 0 :(得分:1)

如果“浏览器缓存”是指http缓存,则是的,服务工作者可以使用fetch()函数来访问它。要控制它与http缓存的交互方式,可以在请求初始化程序中指定一个RequestCache枚举值。像这样:

// completely bypass the http cache when loading url
let r = new Request(url, { cache: 'no-store' });
fetch(r);

// revalidate any http cache entry for url
fetch(url, { cache: 'no-cache' });

// force use of the http cache entry even if its stale, otherwise load from network
fetch(url, { cache: 'force-cache' });

// Only return a response if the http cache entry is present.  Throws for cross-origin
// URLs.
fetch(url, { mode: 'same-origin', cache: 'only-if-cached' });

这同时显示了创建Request对象的完整方法和直接使用fetch()的速记。无论哪种情况,都可以传递缓存值。

获取规范包含RequestCache个值的完整列表:

https://fetch.spec.whatwg.org/#requestcache

没有直接的程序化API可以检查或修改http缓存。