Javascript 服务工作者能否访问浏览器缓存?

Javascript 服务工作者能否访问浏览器缓存?,javascript,service-worker,browser-cache,cachestorage,Javascript,Service Worker,Browser Cache,Cachestorage,我还没有找到一个明确的答案,但从我的实验来看,以下是正确的: 服务人员无法访问或控制传统浏览器缓存。这是有意的吗?有没有我还没有发现的方法 当我说“浏览器缓存”时,我的意思不是“浏览器缓存”。我知道服务人员可以完全访问CacheStorage API。我指的是当浏览器开发工具的“网络”选项卡中的请求说“来自内存缓存”而不是“来自服务工作者”时使用的缓存,或者直接从实际的网络请求开始使用。如果“浏览器缓存”指的是http缓存,那么服务工作者可以使用fetch()函数访问它。要控制它与http缓存的

我还没有找到一个明确的答案,但从我的实验来看,以下是正确的:

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

当我说“浏览器缓存”时,我的意思不是“浏览器缓存”。我知道服务人员可以完全访问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' });
这显示了创建
请求
对象的完整方法,以及直接使用
fetch()
的简写方法。在任何情况下都可以传递缓存值

fetch规范包含
RequestCache
值的完整列表:


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

好的,是的,但是服务人员没有API来查看缓存的内容或手动将任何内容缓存到http缓存中,对吗?它只由浏览器自动处理,不受网站开发人员的控制(除了使用您提到的标题)。您可以使用
cache:“仅当缓存时”
查看缓存中是否有相同的源URL。另外,很难确定
fetch()
响应是来自http缓存还是来自网络。通常,您必须使用性能API来检查
PerformanceResourceTiming.transferSize
属性。如果它来自http缓存,则传输大小为零,对于网络,传输大小为非零。不过,这可能无法跨浏览器进行互操作。