本文共 1148 字,大约阅读时间需要 3 分钟。
4 . 4 消息长度
消息长度是指在传输编码使用后消息体的长度。当一个消息体被包含在一个消息中时,体长由下面决定(按优先级的顺序):
1. 任何肯定不包含一个消息体的 response 消息总是在第一个空行处终结,而无论出现在消息中的实体的头区。
2. 如果一个 Transfer-Encoding 头区( sec14.41 )被给出而且只有 ”identity” ,那么传输长度是使用“ chunked ”传输编码,直到连接被关闭消息被终结。
3. 如果一个 Content-Length 头区( sec14.13 )被给出,那么它既代表了实体长度也代表了传输长度。如果这两个长度不相等肯定不会有 Content-Length 。如果一个消息既存在 Transfer-Encoding 又存在 Content-Length ,后者被忽略。
4 .如果消息使用 “multipart/byteranges” 做媒体类型,并且 transfer-length 也没被给出,那么这个自定界的媒体类型定义了传输长度。这个类型如果接收者无法解析它那肯定不能被使用;在一个 request 中,如果包含一个 Range 头和若干 byte-range 说明那个 client 能够解析 multipart/ranges 。一个 rang 头可能被一个不理解 multipart/byteranges 的 proxy 传递,在这种情况下, server 必须使用 1 , 3 , 5 提供的方法定界。
5 .到 server 关闭一个连接(关闭连接不能被用来指示一个 request 的结束,因为那样将导致 server 无法发送一个 response 。)
为了和 HTTP/1 。 0 应用兼容,包含一个消息体的。 1 请求肯定包含一个有效的 Content-Length
除非知道 server 是 HTTP/1 。 1 兼容。如果一个 request 包含一个消息体而没有
Content-Length ,那么 server 如果不能决定消息的长度应该回以 400 ,或 411 如果它坚持接收一个有效 Content-Length 。
所有接收实体的 HTTP/1 。 1 应用必须接收“ chunked ”传输编码( sec3.6 ),因此允许使用这个机制决定消息长度。
消息绝对不能同时包含 Content-Length 头区和一个非 identity 传输编码。如果一定包含,那么 Content-Length 被忽略。
如果一个 Content-Length 真被给出了,那 它一定对应消息体的字节个数。 HTTP/1 。 1user agent 必须告诉用户如果一个无效长度被接受和看到。
转载地址:http://avbci.baihongyu.com/