状态行

HTTP-version、status-code 三位数字、reason-phrase——响应起始行逐字段解析。

作者 David更新于 第 3 篇(共 22 篇)

语法

status-line   = HTTP-version SP status-code SP reason-phrase
status-code   = 3DIGIT
reason-phrase = 1*( HTAB / SP / VCHAR / obs-text )
HTTP/1.1 404 Not Found

三段之间各恰好一个 SP。注意 reason-phrase 在 ABNF 里是 1*,但实践中允许为空——此时形如 HTTP/1.1 200 (状态码后仍有一个 SP)。

status-code

恰好三位数字,不多不少。首位决定类别:

类别含义客户端对未知码的处理
1xx信息性,中间响应忽略该中间响应,继续等最终响应
2xx成功当作 200
3xx重定向当作 300(不自动跟随)
4xx客户端错误当作 400
5xx服务端错误当作 500

关键规则:客户端 MUST 理解类别,但不必理解每个具体码;遇到不认识的状态码时,按该类别的 x00 处理。这使得新增状态码无需改造客户端。首位为 0 或 6–9 的码非法。

具体每个码的触发条件见状态码。

reason-phrase

纯人类可读描述,无语义。要点:

  • 客户端 MUST NOT 依据它做任何逻辑判断——只看状态码。
  • 服务端可自定义甚至置空;HTTP/1.1 200 OK 与 HTTP/1.1 200 Yay 完全等价。
  • 允许 obs-text(0x80–0xFF),但编码未定义,不应使用非 ASCII。
  • HTTP/2 与 HTTP/3 中该字段已彻底移除——它不携带信息,是纯历史遗留。

1xx 的特殊性

1xx 是中间响应:一次请求可先收到零或多个 1xx,最后才是唯一的最终响应(2xx–5xx)。

  • 1xx 响应终止于其后的空行,且恒无消息体——不受 Content-Length 影响。
  • HTTP/1.0 客户端不认识 1xx,服务端 MUST NOT 向其发送。
码语义
100 Continue已收到请求头,客户端可继续发送请求体。配合 Expect: 100-continue 使用
101 Switching Protocols服务端同意按 Upgrade 切换协议(WebSocket 握手即用此码)
102 Processing(WebDAV,RFC 2518)已废弃
103 Early Hints先行给出 Link 等预加载提示,最终响应随后到达

与消息体的关系

状态码直接决定响应能否有体,且优先级高于 Content-Length:

状态码消息体
1xx恒无
204 No Content恒无
304 Not Modified恒无(但可带 Content-Length,指代若返回 200 时的长度,接收方不得据此读体)
2xx 对 CONNECT无体;其后字节属于隧道
其余由成帧规则决定

对 HEAD 请求的响应恒无体,与状态码无关——但其头字段应与对应 GET 一致。详见消息体长度。

下一篇:字段行语法——字段名、值、OWS 与重复字段的合并规则。

本页目录