Windows 10 - TCP 分段导致部分 HTML 响应

Windows 10 - TCP 分段导致部分 HTML 响应

编辑2:根据评论,将问题从碎片化更新为分段。

编辑:我已将此问题缩小到 Windows 10 本身 - 似乎 IE 强化是 2012 R2 上的问题,这让我相信 8.1 也受到了影响。原始问题内容如下:

我收到分段 HTTP 响应来自网络服务器。

第一个数据包(第一张图片上的 709)如下所示:2- 如您所见,它包含标题和内容。第二个数据包(第一张图片上的 710)如下所示:3。其余数据包与本问题无关,但它们包含其余 HTML 内容。

在 Wireshark 中检查重新组装的数据,显示正确的 HTTP 响应:4但是任何(浏览器或非浏览器)用户空间应用程序都会收到此信息:5。如您所见,第一个数据包中的标头后面的 HTML 内容似乎丢失了,相反,数据从第二个数据包一直延续到最后一个数据包。更有趣的是,这种情况仅当应用程序发送 HTTP/1.1 或 HTTP/1.0 请求时才会发生 - 发送 HTTP/1.2、HTTP/0.9、HTTP/2.0 甚至任何任意数据(如“GET / AAA”)都将导致 Web 服务器以 HTTP/1.1 响应,并且应用程序会收到正确的数据:6。不管怎么说,网络堆栈中的某些东西似乎正在尝试对 HTTP 请求进行某种优化,但我找不到有关此问题的任何信息。此问题仅出现在 Windows 8+(或 8.1+,没有任何 8 机器可供测试)包括服务器版本上。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 系统上运行)。

我愿意接受任何建议,因为坦率地说,此时此刻我觉得自己快要疯了。

答案1

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

响应必须包括一个 WWW-Authenticate 标头字段(第 14.47 节),其中包含适用于所请求资源的质询。

WWW-Authenticate标头包含一个领域,因此浏览器可以提示用户提供此领域的凭据或使用缓存的凭据。发送否WWW-Authenticate而是发送甚至包含脚本的 HTML 页面绝对是服务器的错误行为。

请注意,仅当浏览器使用内置身份验证对话框并且需要提供领域时,才必须使用响应代码 401。如果在 HTTP 之外构建自己的身份验证系统(即 HTML 中的典型登录,就像本例中的情况一样),则必须使用响应代码 200。

答案2

因此,对于任何寻求答案的人来说 - 事实证明 David Schwartz 是对的,问题出在安全软件上,但似乎可以将其归类为 Bitdefender 的一个错误 - 即使完全禁用它也没有变化 - 只有卸载它才能得到正确的结果。似乎它的防火墙 WFP 驱动程序 (bdfwfpf.sys) 始终在工作,无论您安装了什么设置和包(我安装的包没有防火墙功能)。这对我来说似乎非常激进,所以我的解决方案同样激进 - 删除 WFP 防火墙驱动程序文件并锁定相关注册表项的权限。

相关内容