6

什么表示 HTTP 响应结束,没有Content-Length标头?

我已经读过,在某些情况下,该服务器关闭了 TCP 连接。但是我目睹了在收到所有响应后 TCP 连接存在的情况。

因此,在以下情况下会出现一个主要问题:

  • 没有Content-Length标题
  • 收到所有 HTTP 响应后 TCP 连接存在
  • 浏览器希望使用相同的 TCP 连接来发送更多的 HTTP 请求

在那种情况下,浏览器如何知道它可以使用相同的 TCP 连接?服务器可能会发送更多与第一个 HTTP 请求相关的内容,并且会与第二个 HTTP 响应混淆。

4

1 回答 1

8

如果客户端和服务端都支持 HTTP 1.1,并且服务端事先不知道响应体的大小(因此无法发送Content-Length响应头),那么服务端应该使用分块编码,这样可以让客户端找到响应的结尾响应正文,即使服务器在发送响应后没有立即关闭 TCP 连接。

如果无法使用 HTTP 1.1(因为客户端或服务器太旧),则无法使用分块编码,在这种情况下发送没有Content-Length标头的响应会阻止服务器保持 TCP 连接持久。

于 2013-07-07T19:38:02.367 回答