我还没有找到明确的答案,但是从我的实验中可以看出以下事实:
服务人员无法访问或控制传统的浏览器缓存。这是故意的吗?有没有办法做到我还没有发现?
当我说“浏览器缓存”时,我不要是指CacheStorage API。我确实知道服务工作者可以完全访问CacheStorage API。我的意思是,当浏览器开发工具的网络选项卡中的请求说“来自内存缓存”而不是“来自服务工作者”或仅来自实际网络请求时,将使用缓存。
答案 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缓存。