IE9传递的If-Modified-Since HTTP头部是否包含长度信息?

6
请说明IE9传递的奇怪的If-Modified-Since头信息
在我的ASP.NET 4.0 Web应用程序中,我有一个通用处理程序(.ashx),可以提供存储在数据库中的图像。为了效率,我处理一些缓存相关的标头并传递缓存信息。
我经常从尝试解析If-Modified-Since头内容中得到DateTime解析错误,通常来自IE9。原来它发送这样的内容:

Mon, 28 Nov 2011 16:34:52 GMT; length=8799

我通过使用正则表达式来剥离最后一部分来处理它。但是我很好奇:它引用的长度是什么,有什么作用?它是请求URL的缓存数据大小吗?

我有点困惑。听起来你是在说IE9正在发送“Last-Modified”头,但客户端通常没有任何理由发送该头。这是Web服务器应该发送给客户端的头。无论如何,“; length=8799”都不应该是该头的一部分,根据HTTP协议规范,所以我认为某些行为不当的代码错误地将其设置在某个地方。 - Stephen Booher
抱歉,应该是“如果修改自”头部。我会更正问题的。天啊! - Tom Hamming
2个回答

1

这似乎是一个旧的 Netscape 头字段扩展(请参见http-wg 上的古老讨论);尽管它似乎实际上违反了 HTTP/1.0HTTP/1.1 规范(该想法已被 ETag 头替换)。不知道 IE9 是否发送它以及在什么特定条件下发送它(我猜只有一种特定的缓存头组合会触发它)。

我想最好的解决方案是删除分号后面的任何内容,这通常用于在标头中分隔扩展参数(例如,请参见Accept 标头)。


扩展参数仅适用于某些标头字段,而日期不是其中之一。 - Julian Reschke
Mormegli - 只是澄清一下,通常情况下无法对字段值进行“;”解析。 - Julian Reschke

1
根据Squid代理邮件列表上的旧帖子

If-Modified-Since的长度参数是HTTP / 1.0的Netscape扩展,旨在提高If-Modified-Since的准确性,以防文档在同一秒钟内更新两次。

HTTP / 1.1通过ETag标头和If-None-Match更好地解决了相同的问题。

我猜测IE在某个时候采用了这个扩展,并将其保留下来。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接