我有一个React应用程序,在其中我正在提取后端API的请求。我正在尝试在UI端实现高速缓存请求。
我能够在Mozilla Firefox中成功完成此任务,并且运行良好。但是Chrome给我带来了困难。这是我正在尝试实现的代码-
fetch(URL, {
signal: this.abortController.signal,
cache: "default",
headers: {
"Cache-Control": "max-age=120"
}
})
.then(response => return response.json())
.catch(error => {
if (error.name === "AbortError") {
return;
}
this.setError(error);
});
我正在检查缓存的过程-
在Firefox的“网络”标签中进行检查时,我可以看到“已传输”为“已缓存”,并且页面加载得到了显着改善,一切正常。
但是,在Chrome中,我仍然可以看到“ 3.9 KB”的“大小”和一些“ ms”的时间。
我尝试了-Chrome 是否忽略Cache-Control:max-age?没有任何成功。
我还发现-https : //www.mnot.net/blog/2017/03/16/browser-caching说
Chrome仅在请求中支持max-age = 0,并且仅支持0。它不支持min-fresh或max-stale。
但是它有点旧(2017),我不确定它是否仍然适用。
另外,在看取规范- https://fetch.spec.whatwg.org/#concept-request-cache-mode “默认”是高速缓存模式,我需要,但我不知道它为什么不跨越铬工作
谁能指导我正确的方向?要使其在Firefox和chrome中都可以工作,需要做些什么?
编辑 -好吧,将“缓存”用作“强制缓存”适用于google chrome和Firefox。
从-https://hacks.mozilla.org/2016/03/referrer-and-cache-control-apis-for-fetch/
“默认”表示下载资源时使用浏览器的默认行为。firefox和chrome的默认行为是否有所不同?由于这是浏览器的默认行为,因此取决于浏览器如何使用它。
也,
“强制缓存”表示如果在缓存中找到匹配的条目,浏览器将始终使用缓存的响应,而忽略响应的有效性。因此,即使在缓存中找到响应的真正旧版本,也将始终使用未经验证的响应。
我不确定chrome的“强制缓存”如何工作,但这不是我所需要的。
这是2011年报告的铬/铬问题,目前仍未解决:
借助自签名SSL证书,Chrome会完全忽略所有缓存指令,并始终重新加载所有内容。
https://bugs.chromium.org/p/chromium/issues/detail?id=103875
我看到一些替代方法:
希望这有帮助,祝你好运。
感谢您的错误链接和替代方法。我有时放弃这个问题,开始使用Firefox。我将尝试使用给定的替代方案。非常感谢