当时明月在
曾照彩云归
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”编码
在进行chunked编码传输时,在回复消息的头部有Transfer-Encoding: chunked。
编码使用若干个chunk组成,由一个标明长度为0的chunk结束。每个chunk有两部分组成,第一部分是该chunk的长度,第二部分就是指定长度的内容,每个部分用CRLF隔开。在最后一个长度为0的chunk中的内容是称为footer的内容,是一些没有写的头部内容。
详细的以后再说。
“Content-Length”实体头
就是响应头部的一个字段,表示的是响应正文的长度,直接筛选就好了。
还有
当然除了上述这些,HTTP1.1也可能因为连接关闭而消息结束的。
当然了,实际这还是比较麻烦的!!!!