消息体后面有CRLF吗?

问题描述 投票:0回答:2

我不知道在发送正文的所有字节后是否应该发送下一条消息,而无需使用 CRLF 将第一条消息的正文与第二条消息的起始行分开。

这是根据 RFC 7230 的语法:

 HTTP-message   = start-line
                  *( header-field CRLF )
                  CRLF
                  [ message-body ]

根据语法,主体末尾没有 CRLF,但这看起来很奇怪,因为其他所有内容似乎都由 CRLF 分隔,特别是分块主体的语法。

 chunk          = chunk-size [ chunk-ext ] CRLF
                  chunk-data CRLF

这就是没有 CRLF 的情况:

HTTP/1.1 200 OK
Content-Type: text/plain
Content-Length: 3

abcHTTP/1.1 200 OK
Content-Type: text/plain
Content-Length: 3

这就是它的样子:

HTTP/1.1 200 OK
Content-Type: text/plain
Content-Length: 3

abc
HTTP/1.1 200 OK
Content-Type: text/plain
Content-Length: 3

abc

那么,CRLF 应该跟随正文吗?

http httpresponse
2个回答
4
投票

使用 CRLF 阅读起来更容易。

那么您必须将其包含在消息正文中:

RFC 7230,3.5。消息解析稳健性:

HTTP/1.1 用户代理不得作为前言 或者跟随一个额外的 CRLF 请求。如果终止请求 需要带有行结束符的消息正文,那么用户代理必须 将终止 CRLF 八位字节计算为消息正文长度的一部分。


4
投票

不,当存在内容长度并且未使用分块传输编码时,正文的长度正是由内容长度定义的。

© www.soinside.com 2019 - 2024. All rights reserved.