内容长度或传输编码在具有正文时的响应中是必需的

时间:2016-04-25 05:31:21

标签: http curl http-headers

如果响应具有正文/可以具有正文(即状态代码不是204或304),则它应该在响应头中始终具有内容长度或传输编码。在规范中它不是很清楚。

在我的场景中,我有一个没有内容长度或转移编码标题的正文,因此卷曲会一直等待no chunk, no close, no size. Assume close to signal end,而其他客户端(如邮递员)正在获取内容而不会挂起。

2 个答案:

答案 0 :(得分:3)

Transfer-Encoding 是HTTP / 1.1的补充。所以,这个版本的协议似乎与此相关。

它说明了Content-Length

  除非第4.4节中的规则禁止,否则只要在传输之前确定消息的长度,就应该发送它。

这清楚地表明不需要发送。

使用Transfer-Encoding标准状态:

  

Transfer-Encoding通用标头字段指示已对邮件正文应用了哪种(如果有)转换类型,以便在发件人和收件人之间安全地进行转换。

如果没有应用传输编码,这允许省略头字段。

从以下内容可以看出:两个标题可能在回复中有效遗漏

在您的情况下,curl告诉它它的作用:它正在等待远程端关闭连接以了解数据已被完全接收。

您应该提供-v的卷曲标记和相关通信,以便更深入地了解为什么其他工具可以更好地了解为什么在 EOF 之前没有更多数据遇到了。

答案 1 :(得分:2)

RFC 7230对此有一个非常详细的描述(参见Section 3.3.3)。特别是最后一点:

  
      
  1. 否则,这是一条没有声明消息体长度的响应消息,因此消息体长度由服务器关闭连接之前收到的八位字节数决定。
  2.