如果没有 content-length headers,HTTP keep-alive 连接是否可行?

Are HTTP keep-alive connections possible without content-length headers?

我了解在 HTTP 1.0 中,the content of a response is terminated by closing the connection

在 HTTP 1.1 中,引入了 keep-alive connections,允许在单个 TCP 连接中进行多个请求和响应。

当通过同一连接发送多条消息时,需要一种机制来定义一条消息的结束位置和下一条消息的开始位置。

通过测试,我发现当我在响应中设置 content-length header 时这会起作用。通过了解内容长度,客户端知道何时完全接收到内容并可以解析下一个响应。

我的问题是:

是否可以在不设置 content-length header 的情况下在 keep-alive 连接中发送多个响应?

如果是,如何?

澄清一下:我正在考虑在开始将响应发送给客户端时不知道响应长度的情况,我想知道关闭连接是否是实现该连接的唯一方法。

Transfer-Encodingheader正是我要找的。

通过将 transfer-encoding 设置为 chunked,可以省略 Content-Length header。

在分块传输编码中,消息可以在长度已知的多个块中发送。要终止一条消息,将发送一个长度为零的块。

这使得建立 keep-alive 连接成为可能,并且在开始发送时仍然发送长度未知的消息。