跳到主要内容

4. 状态行

响应消息的第一行是状态行 (status-line), 由协议版本, 一个空格 (SP), 状态码, 另一个空格组成, 并以描述该状态码的 OPTIONAL 文本短语结束.

status-line = HTTP-version SP status-code SP [ reason-phrase ]

虽然 status-line 语法规则要求各组成元素之间用单个 SP 八位组分隔, 接收方 MAY 改为按空白分隔的词边界进行解析, 并且除行终止符外, 将任何形式的空白视为 SP 分隔符, 同时忽略前导或尾随空白; 此类空白包括以下一个或多个八位组: SP, HTAB, VT (%x0B), FF (%x0C), 或裸 CR. 但是, 如果消息存在多个接收方且每个接收方对鲁棒性有自己独特的解释, 宽松解析可能导致响应拆分安全漏洞 (参见 Section 11.1).

status-code 元素是一个 3 位整数代码, 描述服务器理解并满足客户端对应请求的尝试结果. 如果接收方识别该状态码, 则根据为该状态码定义的语义解析并解释响应消息的其余部分; 如果具体代码无法识别, 则按该状态码所属类别进行解析和解释.

status-code    = 3DIGIT

HTTP 的核心状态码在 [HTTP] 的 Section 15 中定义, 其中还包括状态码类别, 定义新状态码时的考虑事项, 以及用于收集此类定义的 IANA 注册表.

reason-phrase 元素存在的唯一目的, 是提供与数字状态码关联的文本描述, 主要是为了照顾早期 Internet 应用协议, 因为这些协议更常与交互式文本客户端一起使用.

reason-phrase  = 1*( HTAB / SP / VCHAR / obs-text )

客户端 SHOULD 忽略 reason-phrase 内容, 因为它不是可靠的信息通道 (它可能会针对给定区域设置被翻译, 被中间件覆盖, 或在消息通过其他 HTTP 版本转发时被丢弃). 即使 reason-phrase 缺失, 服务器也 MUST 发送分隔 status-code 与 reason-phrase 的空格 (即 status-line 会以该空格结束).