HTTP 响应结束

问题描述 投票:0回答:2

如果没有

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

我读到,在某些情况下,该服务器会关闭 TCP 连接。但我亲眼目睹过在收到所有响应后 TCP 连接仍然存在的情况。

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

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

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

http http-headers
2个回答
8
投票

如果客户端和服务器都支持 HTTP 1.1,并且服务器事先不知道响应正文大小(因此无法发送

Content-Length
响应标头),则服务器应使用 chunked 编码,这允许客户端即使服务器在发送响应后没有立即关闭 TCP 连接,也能找到响应正文的结尾。

如果无法使用 HTTP 1.1(因为客户端或服务器太旧),则无法使用分块编码,在这种情况下,发送不带

Content-Length
标头的响应会阻止服务器保持 TCP 连接持久。


0
投票

感谢您这篇精彩的文章,它非常有帮助且内容丰富。 ufeff ufeff ufeff

© www.soinside.com 2019 - 2024. All rights reserved.