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

时间:2013-07-07 22:37:24

标签: http

正常的HTTP响应如下:

HTTP/1.0 200 OK

可以省略RFC调用 Reason-Phrase 的内容吗?类似的东西:

HTTP/1.0 200

RFC说:

Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
Reason-Phrase  = *<TEXT, excluding CR, LF>

我理解为:

  • Reason-Phrase
  • 的空字符串正常
  • 但是状态代码之后应该有一个空格

所以以下内容是有效的:

HTTP-Version SP Status-Code SP CRLF

我是否正确了解RFC?

2 个答案:

答案 0 :(得分:16)

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

如果你阅读RFC的Notational Convention,它的含义似乎略有不同:

  

*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 表示它可以是任何文本,只要它是人类可读的问题描述。此文本很重要,因为客户端可能无法理解状态代码的确切含​​义,因此可能需要向用户显示文本。所以即使你可以省略它,我个人也不会。

答案 1 :(得分:1)