Firefox 基于 max-age 的缓存过期行为奇怪

Posted

技术标签:

【中文标题】Firefox 基于 max-age 的缓存过期行为奇怪【英文标题】:Firefox max-age based cache expiration behaving weirdly 【发布时间】:2011-10-14 08:48:11 【问题描述】:

我正在开发一个提供大量地图图块的虚拟地球网络应用程序,并且我正在尝试调整我的服务器发送的 http 标头以指示浏览器 (Firefox) 缓存这些图块的到期时间。我这样做的方式是通过 Cache-Control 标头和 max-age 参数。

经过几次测试,我意识到缓存对于低于 1799 秒(大约 30 分钟)的值不起作用。使用firebug net panel进行一些调试,我发现客户端和服务器时钟之间存在30分钟的不同步。例如,如果服务器发送此标头指示 3600 秒的过期时间:

Date            Fri, 14 Oct 2011 07:46:12 GMT
Server          Apache/2.2.13 (Fedora)
X-Powered-By    php/5.2.11
Connection      close
Cache-Control   max-age=3600
Content-Length  47864
Content-Type    image/jpeg

我浏览了这个请求的缓存内容,我得到了这个。

Last Modified   Fri Oct 14 2011 09:16:16 GMT+0100 (Hora de verano GMT)
Last Fetched    Fri Oct 14 2011 09:16:16 GMT+0100 (Hora de verano GMT)
Expires         Fri Oct 14 2011 09:46:11 GMT+0100 (Hora de verano GMT)

请注意,客户端时间为 GMT+1,服务器时间为 GMT,因此实际偏差约为 30 分钟。

所以,我得出的结论是,Firefox 是根据服务器日期标头计算过期时间,而不是客户端的响应到达日期,对吗?如果是这样,这是一个大问题,因为如果我将过期时间设置为 1 小时,中国的用户永远不会缓存,我该如何解决这个问题?提前致谢。

【问题讨论】:

【参考方案1】:

max-age 表示每个规范响应的 Date 标头中的年龄。所以是的,如果存在时钟偏差,那么用户感知的挂钟时间将会关闭。但这不应该影响中国的用户,除非他们的时钟是关闭的,因为所有涉及的日期在比较之前都会转换为规范的时区,当然....

我很想知道你在哪里找到了没有运行 ntp 的服务器!

【讨论】:

以上是关于Firefox 基于 max-age 的缓存过期行为奇怪的主要内容,如果未能解决你的问题,请参考以下文章

浏览器的缓存

nginx 缓存设置

浏览器缓存

明年找到好工作:面试题打卡第三天

明年找到好工作:面试题打卡第三天

HTTP Header之Cache-Control