HTTP响应可以省略Reason-Phrase吗?

Ben*_*min 17 http

正常的HTTP响应如下所示:

HTTP/1.0 200 OK
Run Code Online (Sandbox Code Playgroud)

可以省略RFC称之为Reason-Phrase的内容吗?就像是:

HTTP/1.0 200
Run Code Online (Sandbox Code Playgroud)

RFC说:

Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
Reason-Phrase  = *<TEXT, excluding CR, LF>
Run Code Online (Sandbox Code Playgroud)

我理解为:

  • Reason-Phrase的空字符串是可以的
  • 但无论如何,在状态码之后应该有一个空格

所以以下内容是有效的:

HTTP-Version SP Status-Code SP CRLF
Run Code Online (Sandbox Code Playgroud)

我是否正确理解了RFC?

Gol*_*rol 17

它看起来就是这样,如果你读到*'零个或多个字符',就像在正则表达式中一样.

如果您阅读RFC 的符号公约,它似乎有一个略微不同的含义:

*rule

The character "*" preceding an element indicates repetition. The full form is "<n>*<m>element" indicating at least <n> and at most <m> occurrences of element. Default values are 0 and infinity so that "*(element)" allows any number, including zero; "1*element" requires at least one; and "1*2element" allows one or two.

因此,尽管它不是正则表达式,但其含义基本相同.在这种情况下,没有尾随数字的星号表示可以有"0或更多""文本".奇怪的说法,但似乎你是对的.

严格来说,这个空间强制性的,虽然我认为如果没有什么可以分开的话,可能会省略一个分隔符.但是,它可能会杀死具有严格实现的客户端,如果它们只是在空格上拆分此字符串并尝试读取描述应该在的元素.但话说回来,这些客户应该使用一些防御性程序来捕捉这种情况.;)

RFC 确实说它可以是任何文本,只要它是一个人类可读的问题描述.此文本很重要,因为客户端可能无法理解状态代码的确切含​​义,因此可能需要向用户显示文本.所以即使你可以省略它,我个人也不会.