http 304 响应与缓存控制相结合似乎不适用于 max-age

Posted

技术标签:

【中文标题】http 304 响应与缓存控制相结合似乎不适用于 max-age【英文标题】:http 304 response combined with cache-control does not seem to work with max-age 【发布时间】:2020-04-25 10:34:44 【问题描述】:

在 Chrome 上,缓存控制标头在与 304 响应结合使用时有效。 我已经用“cache-control no-store”检查了这一点,这使得 Chrome 在下次需要该资源时向服务器发出定期 GET 请求;正如预期的那样。

但是,“cache-control max-age=42”无法按预期工作。它不会在接下来的 42 秒内向服务器发出 GET 请求,而是使用 if-modified-since 标头发出 GET 请求,即使在 42 秒过去之前它不应该这样做。

奇怪的是,带有“cache-control max-age=42”的 200 响应按预期工作,但 304 响应却没有。

任何解释,也许是实现相同目标的方法?

【问题讨论】:

【参考方案1】:

我只用 Chrome 测试过这个。

当 Chrome 发出带有 if-modified-since 标头的 GET 请求时,304 响应中的任何 max-age 都被解释为资源最初返回时的 max-age,而不是从304 响应。 所以为了完成这项工作,新的 max-age 应该是 (time-since-original-response + max-age-you-want)。

但是,max-age 的上限是一年。

【讨论】:

以上是关于http 304 响应与缓存控制相结合似乎不适用于 max-age的主要内容,如果未能解决你的问题,请参考以下文章

005-优化web请求一-gzip压缩http缓存控制和缓存校验[PragmaExpiresCache-Controlmax-ageLast-Modified用户刷新访问避免过度304]

HTTP 304 客户端缓存优化的作用和用法

HTTP 状态码 200(缓存)与状态码 304 有啥区别?

无法让 CloudFront 提供缓存控制标头

AFNetworking:如何知道响应是不是使用缓存? 304 或 200

http之理解304