max-age无法解决客户端和服务器端时间不一致的问题
问题是这样的:
话说,Cache-Control:max-age=N 的 优先级高于 Expires(现在大多数浏览器都是遵循http1.1)
但是我测试的时候,服务器的时间比本地时间慢100s(比如本地的时间戳现在是200s,那么服务器的时间戳是100s)
我在Nginx中设置了css的max-age=60,然而发现,我在60s之内再次访问该css资源时,竟然返回304,理论上应该返回200(from cache)才对啊
求解,谢谢诸位
测试环境:Chrome 64.0.3282.186(正式版本) (64 位)
第一次请求:
后续请求:
Nginx配置:
由服务器与浏览器的时间差引起.
假设服务器在 A 时间返回内容, 那么返回的 HTTP 头类似这样:
可知 css 的有效时间窗口是 A ~ A+60, 浏览器接到时(忽略网络传输等其他耗时)为 A + 100 时间, 它通过计算 <Date> + <max-age> 得知 css 内容已经过期, 因为 A + 100 > A + 60, 因此会重新验证内容(If-Modified-Since, If-None-Match).
下面是个模拟的 HTTP 服务器, 你可以自由修改返回头去测试浏览器反应