Service Worker 可以访问浏览器缓存吗?

Can the service worker access browser cache?

我还没有找到明确的答案,但根据我的实验,以下似乎是正确的:

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

当我说 "browser cache" 时,我 并不是 的意思 CacheStorage API。我知道 service worker 可以完全访问 CacheStorage API。我的意思是当浏览器开发工具的网络选项卡中的请求说 "from memory cache" 而不是 "from service worker" 或直接来自实际网络请求时使用的缓存。

如果 "browser cache" 你指的是 http 缓存,那么 service worker 可以使用 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() 的 shorthand。在任何一种情况下都可以传递缓存值。

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

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

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