即使if不包含Content-Length或Transfer-Encoding,HTTP响应标头(如下所示)也是合法的吗?
- Http: Response, HTTP/1.1, Status: Ok, URL: /AAA/B.json
ProtocolVersion: HTTP/1.1
StatusCode: 200, Ok
Reason: OK
Expires: Fri, 05 Oct 2012 01:41:30 GMT
Date: Fri, 05 Oct 2012 01:40:46 GMT
Vary: Accept-Encoding
Accept-Ranges: bytes
Cache-Control: public, max-age=43
Server: Noelios-Restlet-Engine/1.1.10
ContentType: application/json;charset=UTF-8
ContentEncoding: gzip
Connection: close
X-Served-By: 85.111
HeaderEnd: CRLF
我希望看到Content-Length或Transfer-Encoding,但它们都不存在。
我阅读了HTTP-RFC,但仍然不确定。
@CodeCaster,我确实阅读了RFC第4.4节,但我仍然不清楚,正如你所看到的,响应头用于返回一个json流,所以:
那么,还有什么进一步的评论吗?
答案 0 :(得分:2)
是的,它是有效的。有五种方法可以确定消息长度:
RFC 2616 Section 4.4. Message Length:
消息的传输长度是消息体的长度 它出现在信息中;也就是说,在任何转移编码之后 已被应用。当消息中包含消息正文时, 该身体的转移长度由以下之一决定 (按优先顺序排列):
任何响应消息" MUST NOT"包括一个消息体(例如 作为1xx,204和304响应以及对HEAD的任何响应 请求)总是在第一个空行后终止 标题字段,不管实体标题字段是否存在 消息。
如果存在Transfer-Encoding标头字段(第14.41节) 除了" identity"之外还有其他任何值,那么传输长度是 通过使用" chunked"来定义转移编码(第3.6节), 除非通过关闭连接终止消息。
如果存在Content-Length标头字段(第14.13节),则为其 OCTET中的十进制值表示实体长度和 转发长度。不得发送Content-Length头字段 如果这两个长度不同(即,如果转移编码 标题字段存在)。如果收到包含a的消息 Transfer-Encoding标头字段和Content-Length标头字段, 后者必须被忽略。
如果消息使用媒体类型" multipart / byteranges", 转移长度没有另外规定,那么这个自我 分隔媒体类型定义传输长度。这种媒体类型 除非发件人知道收件人可以解析,否则不会使用[M] UST 它;存在于具有多个字节的Range标头的请求中 - 1.1客户端的范围说明符暗示客户端可以解析 multipart / byteranges响应。
范围标头可能由1.0代理转发 理解multipart / byteranges;在这种情况下,服务器必须 使用第1,3或5项中定义的方法来分隔消息 本节。
- 醇>
由服务器关闭连接。 (关闭连接 因此,不能用于表示请求正文的结束 不会让服务器发回回复。)