4. Status Line (状态行)
响应消息的第一行是状态行 (status-line),由协议版本、一个空格 (SP)、状态码、另一个空格以及可选的描述状态码的文本短语组成。
status-line = HTTP-version SP status-code SP [ reason-phrase ]
尽管状态行语法规则要求每个组成元素由单个 SP 八位字节分隔,但接收方可以 (MAY) 在空格分隔的单词边界上解析,除行终止符外,将任何形式的空格视为 SP 分隔符,同时忽略前导或尾随空格; 这种空格包括以下八位字节中的一个或多个: SP、HTAB、VT (%x0B)、FF (%x0C) 或裸 CR。然而,如果消息有多个接收方且每个接收方对健壮性有自己独特的解释,宽松的解析可能会导致响应拆分安全漏洞 (参见第 11.1 节)。
状态码 (status-code) 元素是一个 3 位整数代码,描述服务器尝试理解和满足客户端相应请求的结果。如果接收方识别该状态码,则按照为该状态码定义的语义解析和解释响应消息的其余部分; 如果不识别特定代码,则根据该状态码的类别进行解释。
status-code = 3DIGIT
HTTP 的核心状态码在 [HTTP] 第 15 节中定义,以及状态码的类别、定义新状态码的考虑事项,以及用于收集此类定义的 IANA 注册表。
原因短语 (reason-phrase) 元素存在的唯一目的是提供与数字状态码相关联的文本描述,这主要是出于对早期互联网应用协议的尊重,这些协议更频繁地与交互式文本客户端一起使用。
reason-phrase = 1*( HTAB / SP / VCHAR / obs-text )
客户端应该 (SHOULD) 忽略原因短语内容,因为它不是可靠的信息通道 (它可能针对给定的区域设置进行翻译、被中介覆盖,或在通过其他版本的 HTTP 转发消息时被丢弃)。即使原因短语不存在,服务器也必须 (MUST) 发送分隔状态码和原因短语的空格 (即状态行将以空格结束)。