响应正文缺少字符

Response body missing characters

我已经看到这个问题发生在多台机器上,使用不同的语言和服务器端环境。好像一直都是IIS,不过可能比较普遍

在较慢的连接上,响应正文中的字符偶尔会丢失。它发生在 25% 到 50% 之间的某个时间,但只发生在某些页面上,并且只发生在 VPN 等慢速连接上。刷新通常可以解决问题。

当前有问题的应用程序是带有 SQL 服务器的 .NET 4。

示例:

<script>
  document.write('Something');
</script>

正被客户端接收为

<scrit>
  document.write('Something');
</script>

这会导致标记内的 JavaScript 打印到页面上,而不是执行。

有谁知道为什么会这样?它是特定于 IIS 的吗?

一般来说,您描述的问题需要在 HTTP 层或更高层损坏,因为 TCP/IP 有校验和、数据包长度、序列号和 re-transmissions 来避免此类问题。

剩下:

  • 生成数据的应用程序
  • 应用程序和服务器之间的任何中间过滤器
  • 返回数据的 HTTP 服务器
  • 任何中间 HTTP 代理,透明或其他方式
  • 请求数据的 HTTP 客户端
  • user-agent 解释数据

您可以根据在服务器边缘和客户端边缘执行的网络捕获进行进一步诊断。

  • 检查客户端在客户端发出的请求,以验证客户端正在对整个文档发出请求,并且不依赖于缓存(没有 RangeIf-* headers)。
  • 如果数据离开服务器时是正确的(特别注意 Content-Length header 并验证它是 200 响应),服务器和应用程序都不会有错。
  • 如果客户端收到的数据是正确的,可以排除中间代理。
  • 如果还有问题,那就是user-agent问题

如果我不得不从心理上调试这样的问题,我会首先查看应用程序以确保它生成正确的文档,然后假设某些闯入者正在修改传输中的数据。 (wan-acceleration 的某些 HTTP 代理、积极的缓存、病毒扫描等...)我可能还假设某些浏览器插件或广告拦截器在收到响应后正在修改响应。

但是,如果没有非常有力的证据,我不会假设它是 HTTP 服务器。如果在客户端而非服务器上检测到损坏,我可能会禁用 TCP 卸载并寻找更新的 NIC Driver。