Rob*_*ert 3 http httpresponse content-length http-headers
该RFC说,content-length头是可选的("..Applications应使用此字段...").
从我可以收集的内容中,如果不包括在内,那么客户端将不知道预期有多少数据,因此在下载正文时(即顶部栏而不是底部)将无法显示确定的进度条.

省略此标题是否还有其他副作用或错误?
我认为你的隐含问题是"客户端如何检测HTTP消息的结束?" .请参阅RFC 7230 - HTTP/1.1消息语法和路由 - 消息正文长度:
消息正文的长度由以下之一确定(按优先顺序排列):
对HEAD请求的任何响应以及具有1xx(信息),204(无内容)或304(未修改)状态代码的任何响应始终由标头字段后的第一个空行终止,而不管头部字段是否存在于消息,因此不能包含消息体.
对CONNECT请求的任何2xx(成功)响应意味着连接将在结束头字段的空行之后立即成为隧道.客户端必须忽略在这样的消息中接收的任何Content-Length或Transfer-Encoding头字段.
如果存在传输编码头字段并且分块传输编码(部分4.1)是最终编码,则通过读取和解码分块数据来确定消息体长度,直到传输编码指示数据完成为止.
如果响应中存在Transfer-Encoding头字段并且分块传输编码不是最终编码,则通过读取连接来确定消息体长度,直到服务器关闭它.如果请求中存在Transfer-Encoding头字段并且分块传输编码不是最终编码,则不能可靠地确定消息体长度; 服务器必须使用400(错误请求)状态代码进行响应,然后关闭连接.
如果收到包含Transfer-Encoding和Content-Length头字段的消息,则Transfer-Encoding将覆盖Content-Length.这样的消息可能表示尝试执行请求走私(第9.5节)或响应拆分(第9.4节),并且应该作为错误处理.发送方必须在向下游转发此类消息之前删除收到的Content-Length字段.
如果在没有Transfer-Encoding的情况下收到消息并且具有不同字段值的多个Content-Length头字段或具有无效值的单个Content-Length头字段,则消息成帧无效且接收者必须将其视为不可恢复的错误.如果这是请求消息,则服务器必须以400(错误请求)状态代码响应,然后关闭连接.如果这是代理收到的响应消息,则代理必须关闭与服务器的连接,丢弃收到的响应,并向客户端发送502(Bad Gateway)响应.如果这是用户代理收到的响应消息,则用户代理必须关闭与服务器的连接并丢弃收到的响应.
如果在没有Transfer-Encoding的情况下存在有效的Content-Length头字段,则其十进制值以八位字节定义预期的消息体长度.如果发送方关闭连接或接收方在收到指定的八位字节数之前超时,则接收方必须认为该消息不完整并关闭连接.
如果这是请求消息而且以上都不是真的,那么消息体长度为零(不存在消息体).
否则,这是没有声明的消息体长度的响应消息,因此消息体长度由服务器关闭连接之前接收的八位字节数确定.
当服务器省略content-length头时,它必须使用其他一种机制来指示消息的结束.
所以回答你的问题:场景3(分块)和7(读取直到服务器关闭连接)是客户端事先不知道长度的那些.
| 归档时间: |
|
| 查看次数: |
5869 次 |
| 最近记录: |