HTTP响应头之间Expires: 0和之间有什么区别Expires: -1?RFC 2616定义无效日期格式,特别是包括值"0"作为已经过期.但是,有些服务器(例如www.google.de)会回复Expires: -1.
是否有使用-1over 的优势,0或者甚至是某些破坏的HTTP客户端需要它?
Pav*_*sky 31
问题在于Internet Explorer(特别是旧版本)处理的Expires标头的无效程度.IE使用Trident布局引擎和WinINET API来处理HTTP请求.您可能知道可以在HTTP标头中指定Expires
Expires: 0
Run Code Online (Sandbox Code Playgroud)
或在元标记中
<meta http-equiv="Expires" content="0">
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,Expires成为响应内容的一部分(不是标题内容),因此它将由Trident处理,然后传播到WinINET:
如果WinINET下载具有无效Expires标头的响应(例如,不包含有效HTTPDATE值的响应)并且没有其他缓存指令,则它会将文档标记为在一小时前过期.然而,三叉戟没有这样的逻辑.如果指定了无效时间,Trident将获取当前时间戳并将其用作到期时间.如果遇到Pragma:no-cache指令,Trident也将使用当前时间戳.如果用户尝试在处理HTTP/404的同一秒内重新导航到当前文档,则现有缓存条目的错误更新到期将导致对该请求将其视为新鲜.如果用户点击"刷新"按钮或F5,将绕过缓存并显示404页面.
换句话说,Expires: 0并不总是导致资源过期,因此应该避免Expires: [some valid date in the past]使用,而应该使用它.
小智 10
Expires:-1 Expires标头指定何时应将内容视为过期.值-1表示内容立即过期,并且必须在再次显示之前重新请求. http://www.httpwatch.com/httpgallery/headers/
max-age = 0只是告诉缓存(和用户代理)响应从一开始就是陈旧的,因此在使用缓存副本之前,它们应该重新验证响应(例如,使用If-Not-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" />
Run Code Online (Sandbox Code Playgroud)
对于正式工作,我建议将当前日期时间设置为元过期时间,而不是使用旧的固定日期(这将使谷歌等搜索引擎将您的网站标记为旧网站,而不是显示在顶部)
2- 如果您的后端是 PHP,您可以像这样处理它:
<meta http-equiv="Expires" content="<?php echo gmdate('D, d M Y H:i:s', time()-3600) . ' GMT' ?>" />
Run Code Online (Sandbox Code Playgroud)
PS:为了以防万一,我提前一小时。
| 归档时间: |
|
| 查看次数: |
68167 次 |
| 最近记录: |