我还没有找到一个明确的答案,但从我的实验来看,以下似乎是正确的:
Service Worker 无法访问或控制传统的浏览器缓存。这是故意的吗?有没有我还没有发现的方法?
当我说“浏览器缓存”时,我并不是指CacheStorage API。我知道服务人员可以完全访问 CacheStorage API。我的意思是当浏览器开发工具的网络选项卡中的请求说“来自内存缓存”而不是“来自服务工作者”或直接来自实际网络请求时使用的缓存。
我还没有找到一个明确的答案,但从我的实验来看,以下似乎是正确的:
Service Worker 无法访问或控制传统的浏览器缓存。这是故意的吗?有没有我还没有发现的方法?
当我说“浏览器缓存”时,我并不是指CacheStorage API。我知道服务人员可以完全访问 CacheStorage API。我的意思是当浏览器开发工具的网络选项卡中的请求说“来自内存缓存”而不是“来自服务工作者”或直接来自实际网络请求时使用的缓存。
如果“浏览器缓存”是指 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()
在任何一种情况下都可以传递缓存值。
fetch 规范包含完整的RequestCache
值列表:
https://fetch.spec.whatwg.org/#requestcache
没有直接的编程 API 来检查或修改 http 缓存。