分块 HTTP 响应未完全传递

分块 HTTP 响应未完全传递

考虑以下设置

 +-------+            +--------+           +----------+
 |       |            |        |           |          |
 |       +----------->+        +---------->+          |
 |       | TCP TUNNEL |        |    HTTPS  |          |
 +-------+            +--------+           +----------+
  User                  SSH Server         Web server

用户对 127.0.0.1:8888 执行 HTTP GET 请求

用户正在通过 TCP 隧道从 127.0.0.1:8888 传输到SSH 服务器,使用 SSH 端口转发

用户正在通过 TCP 隧道SSH 服务器发送到 Web 服务器,服务器响应传输编码:分块

用户仅接收前 700KB 的数据,连接就挂起。

当使用固定的 Content-Length 时,同样的事情也能完美运行。

调查

当从 SSH 服务器本身执行相同的 HTTP GET 请求时 -收到全部回复

当从另一种类型的 TCP 隧道(即从用户到 SSH 服务器的 SOCKS)执行相同的 HTTP GET 请求时 -用户仅接收 700kb 的数据

通过隧道执行 HTTP GET 请求时,HTTP 服务器以固定长度的主体进行响应,所有数据均已接收

谜题

我们应该从哪里开始寻找?为什么 HTTP GET 在直接从 SSH 服务器运行时可以完美运行,但通过隧道运行时却不起作用?

相关内容