【问题标题】:Why is expires header response set to future date with max-age=0?为什么将过期标头响应设置为 max-age=0 的未来日期?
【发布时间】:2020-09-02 21:54:05
【问题描述】:

我注意到 Google Cloud Storage 发送的 HTTP 响应标头中的 expires 属性有一个奇怪的行为。 虽然,缓存控制是用 ma​​x-age:0 为元数据中的文件定义的(如屏幕截图所示),但 expires 属性设置为日期未来一年(第二张截图)。为什么这个日期定在未来?

这种行为的问题在于,最新的 Firefox 版本(v.77 和 v.78)似乎解释了 expires 属性,尽管它在文档中说明,它如果定义了 max-age,则不会(请参阅https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Expires)。对于使用 HLS 的直播视频播放,此行为会导致在短时间内缓冲,因为清单已被浏览器缓存。 mozilla@bugzilla 上已经有关于此行为的错误报告(请参阅https://bugzilla.mozilla.org/show_bug.cgi?id=1648075)。


更新

进一步的调查表明,在这种情况下,Firefox 不是问题,他们只是更改了标题属性的解释并坚持使用自 v.77 以来的documentation,其中 '=' 被定义为需要的字符,而不是 ' :'。显然,其他浏览器(以及直到 v.76 的 FF)也可以使用 ':' 正确解释它。

因此,在我们的案例中,需要在将文件写入 GCS 的服务内部解决问题。

【问题讨论】:

    标签: firefox http-headers google-cloud-storage


    【解决方案1】:

    很难说为什么谷歌云存储这样做。也许Expires 是默认值,而Cache-Control 用于自定义用户设置?更有可能的是,这只是一个疏忽。

    重要的一点是,这种行为是允许的,并且由于explicit precedencemax-ageexplicit precedence 而对兼容的浏览器是无害的:

    如果响应包含带有 max-age 指令的 Cache-Control 字段(第 5.2.2.8 节),则收件人必须忽略 Expires 字段。

    所以真正的问题是 Firefox 不符合 HTTP 规范。希望that bug 能尽快修复。

    【讨论】:

      猜你喜欢
      • 2013-03-12
      • 1970-01-01
      • 2022-10-19
      • 2015-05-02
      • 1970-01-01
      • 2017-05-02
      • 1970-01-01
      • 2020-08-11
      • 2023-04-11
      相关资源
      最近更新 更多