Windows 10 – TCP分段会导致部分HTML响应

编辑2:根据评论,更新的问题从分段到分割。

编辑:我已经把这个问题缩小到Windows 10单独 – 似乎像IE硬化是2012 R2的问题,导致我相信8.1也受到影响。 原始问题内容如下:

我收到来自web服务器的分段HTTP响应 。

第一个数据包(第一个图像上的709)如下所示: 2 – 您可以看到它包含标题,然后是内容。 第二个数据包(第一个图像上的710)如下所示: 3 。 其余的数据包与这个问题无关,但是它们包含了其余的HTML内容。

在Wireshark中检查重组数据显示正确的HTTP响应: 4 ,但是,任何(浏览器或不浏览器)的用户空间应用程序都会收到: 5 。 正如您所看到的,它看起来像是第一个数据包中的AFTER标头的HTML内容丢失,而不是数据从倒数第二个数据包开始。 对于一切都变得更有趣,只有当应用程序发送HTTP / 1.1或HTTP / 1.0请求 – 发送HTTP / 1.2,HTTP / 0.9,HTTP / 2.0甚至像GET / AAA任意数据将导致Web服务器响应HTTP / 1.1和应用程序接收适当的数据: 6 。 对于什么是值得的,似乎networking堆栈中的某些东西正在尝试对HTTP请求进行某种优化,但我无法find任何关于此的信息。 只有在Windows 8+(或8.1+,没有任何8台机器才能testing)包括服务器版本时才会出现问题。 Windows 7或更旧版本或任何其他基于nix的系统都没有问题。 这是同样的问题,可以在TP-Link论坛上看到( http://forum.tp-link.com/showthread.php?93626-TL-SG105E-v2-Web-interface-unresponsive-Config-utility-works )但是我敢肯定,这是Windows实现失败的一个问题,在这个特定的情况下(即使假设web服务器做了不正确的事情,这在较老的Windows和* nix系统上工作)。

坦率地说,在这一点上,我愿意接受任何build议,我想我会疯了。

这可能是两个错误的组合:服务器发送无效响应,AV通过破坏它来处理这个错误的响应。 服务器发送代码为401的响应,但没有WWW-Authenticate标头。 根据HTTP标准这是无效的:

响应必须包含一个WWW-Authenticate头域(14.47节),其中包含一个适用于所请求资源的挑战。

这个包含领域的WWW-Authenticate头部是需要的,以便浏览器可以提示用户提供这个领域的凭证或者使用caching的凭证。 发送没有WWW-Authenticate ,而是发送一个甚至包含脚本的HTML页面肯定是错误的服务器行为。

请注意,响应代码401只有在使用身份validation对话框中的浏览器才能使用,然后需要提供领域时才能使用。 如果在HTTP之外build立自己的authentication系统(即HTML内部的典型login就好像在这种情况下),那么必须使用响应代码200。

所以,对于任何正在寻找答案的人来说,大卫·施瓦茨(David Schwartz)是正确的,问题出在安全软件上,但是它似乎可以被归类为Bitdefender的一个bug,即使完全禁用后也没有任何变化 – 只有卸载它给出了正确的结果。 看来它的防火墙WFP驱动程序(bdfwfpf.sys)总是工作,无论您安装的设置和软件包(我没有防火墙function)。 这对我来说似乎非常激进,所以我的解决scheme同样具有侵略性 – 删除WFP防火墙驱动程序文件并locking相关registry项的权限。