HTTP状态标头的语法

时间:2009-06-17 22:31:43

标签: language-agnostic http http-headers specifications

有很多方法可以编写HTTP状态标头:

HTTP/1.1 404 Not Found
Status: 404
Status: 404 Not Found

但是哪种语义正确且符合规范?

编辑:按状态标题我的意思是this,使用PHP的header()等函数。

4 个答案:

答案 0 :(得分:4)

一段时间之后添加一些信息,因为我在研究相关内容时遇到了这个问题。

我认为Status头字段最初是作为CGI规范RFC 3875的一部分发明的:

https://tools.ietf.org/html/rfc3875#section-6.3.3

引用:

The Status header field contains a 3-digit integer result code that
indicates the level of success of the script's attempt to handle the
request.

   Status         = "Status:" status-code SP reason-phrase NL
   status-code    = "200" | "302" | "400" | "501" | extension-code
   extension-code = 3digit
   reason-phrase  = *TEXT

它允许CGI脚本将状态代码返回到Web服务器,该代码覆盖HTTP状态行中显示的默认值。通常,服务器缓冲脚本的结果并为客户端发出新标头。这是一个有效的HTTP标头,以修改后的HTTP状态行开头,省略脚本“​​Status:”标题字段(加上RFC要求的其他一些转换)。

因此,所有示例都可以从 CGI脚本中有效,但只有第一个示例在HTTP标头中才有效。后两者仅来自CGI脚本(或者可能是FastCGI应用程序)。

当CGI脚本生成完整且有效的HTTP标头(Web服务器逐字传递给客户端)时,它也可以在“非解析标头”(NPH)模式下运行。因此,这不应包括Status:标头字段。

注意,我感兴趣的是,如果NPH脚本有点错误并且发出Status:头字段,可能除了HTTP状态行之外,应该获得哪种状态。我找不到任何明确的指示,我怀疑它是由解析输出的任何东西实现的,无论是客户端还是服务器。

答案 1 :(得分:3)

由于http://tools.ietf.org/html/rfc2616#section-6以及更具体的http://tools.ietf.org/html/rfc2616#section-6.1在指明状态代码时未提及使用“状态:”,并且由于http://www.iana.org/assignments/message-headers/message-headers.xml处的正式标头列表未提及“状态“,我倾向于认为它不应该作为标题提供。

答案 2 :(得分:1)

我找到答案的最接近的是Fast CGI spec,它指出通过状态和位置标头设置状态代码。

答案 3 :(得分:0)

其中很多是非常随意的字符串,但这里有常用的w3c规范

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html