9

我知道在 HTTP 1.0 中,响应的内容是通过关闭连接来终止的

在 HTTP 1.1 中,引入了保持活动连接,在单个 TCP 连接中启用多个请求和响应。

当通过同一连接发送多条消息时,需要一种机制来定义一条消息在哪里结束,下一条消息从哪里开始。

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

我的问题是:

是否可以在不设置内容长度标头的情况下在保持活动连接中发送多个响应?

如果是,如何?

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

4

1 回答 1

10

Transfer-Encoding标头是我正在寻找的。

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

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

这使得有可能保持连接并在开始发送时仍然发送长度未知的消息。

于 2018-03-13T12:37:51.737 回答