温馨提示:本文翻译自stackoverflow.com,查看原文请点击:javascript - Google chrome not respecting max-age in Cache-Control
browser-cache fetch google-chrome javascript reactjs

javascript - Google Chrome不遵守Cache-Control中的最大使用期限

发布于 2020-05-16 08:30:17

我有一个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);
            });

我正在检查缓存的过程-

  1. 首先打开正在执行获取请求的标签。
  2. 将选项卡更改为其他选项卡。
  3. 在超时时间(120秒)内返回步骤1中提到的选项卡

在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的“强制缓存”如何工作,但这不是我所需要的。

查看更多

提问者
Maverick
被浏览
62
rpg600 2020-04-08 00:29

这是2011年报告的铬/铬问题,目前仍未解决:

借助自签名SSL证书,Chrome会完全忽略所有缓存指令,并始终重新加载所有内容。

https://bugs.chromium.org/p/chromium/issues/detail?id=103875

我看到一些替代方法:

  • 您可以成为CA,将证书签名为CA,然后将此证书导入chrome权威机构(在chrome:// settings / certificates中),有关更多详细信息,请参阅 让Chrome接受自签名的本地主机证书这是我目前使用的解决方案。
  • 在Letsencrypt中使用免费的SSL证书。它对我没有用,因为我使用.docker域,它不是有效的公共后缀,因此无法获得证书。
  • 您可以使用http网址而不是https进行缓存测试,但Chrome会触发您需要在Chrome设置中禁用的混合内容错误。
  • 只需使用Firefox进行缓存测试即可。

希望这有帮助,祝你好运。