http响应报文的长度

我太难了

Posted by bbkgl on September 27, 2019

当时明月在

曾照彩云归

HTTP1.0

http1.0因为是短连接,所以是没有keepalive的,对方会直接close()掉。

也就是:

while (read()/recv() == -1)
    ...

对方close()后收到的就是-1。

HTTP1.1

HTTP 1.1标准给出了如下方法(按照优先级依次排列):

  • 响应状态(Response Status)为1xx/204/304或者请求方法为HEAD时,消息体长度为0.
  • 如果使用了非”identity”的Transfer-Encoding编码方式,则消息体长度由”chunked”编码决定,除非该消息以连接关闭为结束.
  • 如果存在”Content-Length”实体头,则消息长度为该数值.
  • 如果消息使用关闭连接方式代表消息体结束,则长度由关闭前收到的长度决定. 该条对HTTP Request包含的消息体不适用.

“chunked”编码

参考HTTP协议之chunk介绍

在进行chunked编码传输时,在回复消息的头部有Transfer-Encoding: chunked。

编码使用若干个chunk组成,由一个标明长度为0的chunk结束。每个chunk有两部分组成,第一部分是该chunk的长度,第二部分就是指定长度的内容,每个部分用CRLF隔开。在最后一个长度为0的chunk中的内容是称为footer的内容,是一些没有写的头部内容。

详细的以后再说。

“Content-Length”实体头

就是响应头部的一个字段,表示的是响应正文的长度,直接筛选就好了。

5db02dc68b58bc7bf7d1fe3c

还有

当然除了上述这些,HTTP1.1也可能因为连接关闭而消息结束的。

当然了,实际这还是比较麻烦的!!!!