之间是什么区别Expires: 0
和Expires: -1
在HTTP响应报头? RFC 2616定义无效日期格式,特别是包括值“0”作为已过期 。 然而,一些服务器(例如www.google.de)与回复Expires: -1
。
是否有优于使用-1
超过0
或者这甚至需要一些破碎的HTTP客户端?
之间是什么区别Expires: 0
和Expires: -1
在HTTP响应报头? RFC 2616定义无效日期格式,特别是包括值“0”作为已过期 。 然而,一些服务器(例如www.google.de)与回复Expires: -1
。
是否有优于使用-1
超过0
或者这甚至需要一些破碎的HTTP客户端?
问题是如何失效Expires头由Internet Explorer(尤其是旧版本)进行处理。 IE使用三叉戟布局引擎和的WinINET API来处理HTTP请求。 正如你可能知道过期可以在HTTP头中指定
Expires: 0
或者meta标签
<meta http-equiv="Expires" content="0">
在第二种情况下,过期时间成为响应内容(未头内容)的一部分,所以它会被由三叉戟处理,然后传播到的WinINET :
如果下载的WinINET使用无效的响应Expires头(例如,一个不包含一个有效的HTTPDATE值),并没有其他的缓存指令,它会在文档标记为具有一个小时前到期。 三叉戟,但是,没有这样的逻辑。 如果指定了无效的时间,三叉戟抓住当前的时间戳,并将其用作到期。 三叉戟也将使用当前的时间戳,如果它遇到附注:no-cache指令。 如果用户试图完全相同的第二期间来重新定位到当前文档,所述HTTP / 404进行处理,现有的高速缓存条目的不正确地更新的到期将导致它被处理该请求作为新鲜。 如果用户打的刷新按钮或F5,高速缓存将被旁路,404页会显示。
换句话说Expires: 0
并不总是会导致立即资源到期,因此应避免与Expires: [some valid date in the past]
应改为使用。
到期日:-1 Expires头指定内容何时将被认为是过时的。 值-1表示该内容立即过期并且必须被再次显示之前必须重新申请。 http://www.httpwatch.com/httpgallery/headers/
最大年龄= 0只是告诉缓存(和用户代理)的响应是陈旧的一开始就使用缓存副本之前,所以他们应该重新验证响应(例如,与若非-Modified头),而没有-cache使用缓存副本之前告诉他们,他们必须重新验证。
更多信息考虑http://www.w3.org/Protocols/HTTP/1.1/rfc2616.pdf
使用“-1”是无效的,将被视为等同于“0”。 它不应该触发重新加载在所有。
请注意:在某些浏览器,它可以给1小时额外或使用默认的过期时间缓存。
1 - 所以最好还是给它一个正确的旧日期,如:
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
对于正式的工作,我建议给当前日期时间过期元,而不是使用旧的固定日期(这将使像谷歌搜索引擎将网站标记为老不切顶器显示)
2 - 如果你的后端是PHP就可以对付它,如:
<meta http-equiv="Expires" content="<?php echo gmdate('D, d M Y H:i:s', time()-3600) . ' GMT' ?>" />
PS:我给前一小时只是为了以防万一。