6

请澄清If-Modified-SinceIE9 传递的这个奇怪的标头

在我的 ASP.NET 4.0 Web 应用程序中,我有一个通用处理程序 (.ashx),它为存储在数据库中的图像提供服务。为了提高效率,我正在处理一些与缓存相关的标头并传递缓存信息。

我在尝试解析If-Modified-Since标头内容时经常遇到 DateTime 解析错误,通常来自 IE9。原来它正在发送这样的东西:

格林威治标准时间 2011 年 11 月 28 日星期一 16:34:52;长度=8799

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

4

2 回答 2

1

这似乎是头字段的旧 Netscape 扩展(参见关于 http-wg 的古老讨论);即使它实际上似乎违反了HTTP/1.0HTTP/1.1规范(这个想法(在功能上)被 ETag 标头取代)。不知道 IE9 是否/为什么发送它以及在什么特定条件下发送它(我猜只有缓存标头的特定组合会触发它)。

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

于 2012-09-27T20:02:43.427 回答
1

根据Squid 代理邮件列表上的一篇旧帖子:

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

HTTP/1.1 通过 ETag 标头和 If-None-Match 以更好的方式解决了同样的问题。

我猜 IE 在某个时候调整了这个扩展并将它留在里面。

于 2012-09-27T20:06:13.967 回答