HTML页面在客户端缺少4096个字符

时间:2011-07-06 20:47:02

标签: html internet-explorer iis

在我的IIS网络服务器日志文件中,我不时发现状态为404的条目(未找到)我无法解释:

2011-07-06 17:05:48 W3SVC1804222802 10.248.3.8
GET /appl/localscripts/ifacobjcatFrame - 80 - 123.123.123.123
HTTP/1.0 Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+5.1;+Trident/4.0;+
.NET+CLR+2.0.50727;+.NET+CLR+3.0.04506.30;+.NET+CLR+3.0.04506.648;+.NET+
CLR+3.5.21022;+MS-RTC+EA+2;+MS-RTC+LM+8) www.example.com 404 0 2 5836 15

奇怪的部分是GET /appl/localscripts/ifacobjcatFrame,其确实应该是:GET /appl/localscripts/iface.js,因为我的代码有:

[snip 1100 chars]
<script type="text/javascript" src="../localscripts/iface.js"></script>
[snip almost 4096 chars]
<div id="frm_roomFrame">
[snip another 300 char]

iface.js被截断,objcatFrame被追加,这在我的HTML中更进一步。

我数了一下,似乎正好丢掉了4096个字符。

奇怪的是,这个页面适用于我的1000个客户中的999个各种浏览器版本。只有一个客户有问题。

Internet Explorer可以在HTML中随机删除4096吗?

注意:日志文件行向末尾显示5836个字节,因此我的服务器声称为该页面发送了正确的字节数。

1 个答案:

答案 0 :(得分:1)

对这个问题的回答非常晚,但是值得在这里做一些笔记,以便遇到这个问题并找到这个页面的人(像我一样)有另一个领导。

看起来好像这个问题是一个相当模糊的IE漏洞与前瞻下载程序有关,它试图优化下载javascript(可能还有css等)。这里有一个很好的描述here和修复文档here

它基本上归结为解析器试图从前几个kbs确定字符集,并且有一个链接有资格进行跨越kb边界的超前下载。解析器重新启动并为前瞻下载程序提供其链接的错误数据,从而导致您看到此格式错误的查询。根据第二个链接,链接可以跨越的确切边界导致失败,并且坏链接中明显“跳过”的数量可能会有所不同,但往往是4k的倍数。

幸运的是,因为解析器重新启动它仍然会尝试正确地重新获取链接,因此用户不应该看到任何错误,尽管当然你也可能为用户提供一些安全逻辑许多不好的请求,所以可能会有一些副作用。

希望这有助于另一位读者,因为这个错误让我把头发拉了出来!