在Chromium 93中不再正确解释缓存控制标头 [英] Cache-Control headers no longer interpreted properly in Chromium 93
本文介绍了在Chromium 93中不再正确解释缓存控制标头的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
从本月初(2021年9月)开始,我们正在构建的Web应用程序断断续续地开始显示错误页面。我们已经追踪到了与HTTP响应缓存相关的问题,但我们在这段时间内在代码中所做的任何更改都没有包含与此相关的更改,因此我们怀疑这是由Chromium 93更新引起的。
是否有任何已知的Chromium版本93问题?
推荐答案
我们设法追踪到了这一点--事实上,这不是Chromium的问题,而是我们自己的代码中一个多年未被注意到的问题。
对于特定情况,我们为HTTP响应添加一个缓存头,如下所示:
Cache-Control: max-age=0 must-revalidate
这不适用于此特定标头的the specifications,它们是。
缓存指令具有以下有效规则:
- 不区分大小写,但建议使用小写。
- 多个指令以逗号分隔。
- 某些指令有一个可选参数,可以是标记或带引号的字符串。(有关定义,请参阅规范)
换句话说,它应该是逗号分隔的指令列表,即
Cache-Control: max-age=0, must-revalidate
这(正确地)崩溃是由于Chromium的更新如预期所致。This changeset显示了一个更新,使Chromium在解释缓存控制标头时变得更加严格,对于我们的情况,这一点可以从以下(new!)单元测试中确定:
TEST_F(HttpResponseHeadersCacheControlTest, MaxAgeWithInterimSpaceIsRejected) {
InitializeHeadersWithCacheControl("max-age=1 2");
EXPECT_FALSE(headers()->GetMaxAgeValue(TimeDeltaPointer()));
}
因此,代码最初似乎被解释为
Cache-Control: max-age=0
但在最新版本的Chrome中,现在完全忽略。
确保在整个代码库中用逗号分隔缓存控制标头解决了此问题。
这篇关于在Chromium 93中不再正确解释缓存控制标头的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文