如果没有
Content-Length
标头,什么表示 HTTP 响应的结束?
我读到,在某些情况下,该服务器会关闭 TCP 连接。但我亲眼目睹过在收到所有响应后 TCP 连接仍然存在的情况。
因此,当出现以下情况时,就会出现一个主要问题:
Content-Length
标题在这种情况下,浏览器如何知道它可以使用相同的 TCP 连接? 服务器可能会发送更多与第一个 HTTP 请求相关的内容,并且这些内容会与第二个 HTTP 响应混合在一起。
如果客户端和服务器都支持 HTTP 1.1,并且服务器事先不知道响应正文大小(因此无法发送
Content-Length
响应标头),则服务器应使用 chunked 编码,这允许客户端即使服务器在发送响应后没有立即关闭 TCP 连接,也能找到响应正文的结尾。
如果无法使用 HTTP 1.1(因为客户端或服务器太旧),则无法使用分块编码,在这种情况下,发送不带
Content-Length
标头的响应会阻止服务器保持 TCP 连接持久。
感谢您这篇精彩的文章,它非常有帮助且内容丰富。 ufeff ufeff ufeff