【问题标题】:Is the Content-Length header required for a HTTP/1.0 response?HTTP/1.0 响应是否需要 Content-Length 标头?
【发布时间】:2013-04-06 03:36:30
【问题描述】:

HTTP/1.0 响应是否需要 Content-Length 标头? HTTP 规范提到它是请求所必需的,但没有提及任何关于响应的内容:

http://www.w3.org/Protocols/HTTP/1.0/draft-ietf-http-spec.html#Content-Length

所有 HTTP/1.0 都需要有效的 Content-Length 字段值 请求包含实体主体的消息。

如果响应不需要,那么当响应大于 1MB 时,客户端如何读取响应?

【问题讨论】:

标签: http http-headers


【解决方案1】:

规范的第 10.4 节(您链接到)没有说明响应本身的要求,而是链接到 section 7.2.2,它指定服务器可以通过以下方式指示包含实体主体的响应的长度

  • 发送Content-Length 标头,或
  • 在发送完整个响应后关闭连接。

Section 7.2 表示对HEAD 请求和1xx、204 或304 响应的响应不应包含实体主体,因此无需包含Content-Length 标头;和

所有其他响应必须包含一个实体主体或一个用零 (0) 值定义的 Content-Length 标头字段。

所以回答这个问题:当没有收到Content-Length时,客户端会一直读取直到服务器关闭连接。

【讨论】:

  • 我相信最后的结论并不完全准确。 “客户端一直读取,直到服务器关闭连接,或已收到宣布的内容长度;之后(tcp)连接可用于另一个请求。”如果我在这里犯了错误,请告诉我。
  • @KemHeyndels 好吧,这个问题基本上是问当 没有 Content-Length 标头时发生了什么,所以...
  • @KemHeyndels 我已经澄清了一点答案;它在我的新手时代写的,也许有点不清楚。感谢您提请我注意。
  • 我了解到(艰难的方式)如果响应“大”,包括 Content-Length 可以防止出现问题。不确定什么是“大”,但当我包含它时,我的 API 开始处理超过 100k 的响应。
  • 尤其是在 android 上,必须有 Content-Length。我学到了很难的方法:stackoverflow.com/questions/51685816/… 如果没有 Content-Type,如果服务器关闭连接,android 会给出一个异常(读取数据,然后喊出异常)。放置 Content-Type 后问题就消失了。它是不同库可能希望强制执行的那些非标准事物之一,因此即使 rfc 没有强制要求,也最好把它说出来
猜你喜欢
  • 1970-01-01
  • 2014-09-02
  • 1970-01-01
  • 2013-12-21
  • 1970-01-01
  • 2012-10-12
  • 2018-09-30
  • 2011-02-16
  • 1970-01-01
相关资源
最近更新 更多