HTTP Message Format(HTTP 报文格式)

Definition

HTTP Message Format(HTTP 报文格式) 是 HTTP 消息组织控制数据、首部字段和内容的结构规范。在 HTTP/1.1 中,它表现为可读的文本消息语法;HTTP/2 和 HTTP/3 则使用二进制帧承载相同的 HTTP 语义。

它规定 / 它负责:

  • 规定请求和响应都由起始部分、首部部分以及可选内容组成;请求与响应的起始部分分别是请求行和状态行。
  • 规定通过行首的控制信息标识请求意图(请求行)或处理结果(状态行)。
  • 在 HTTP/1.1 文本语法中,通过独占一行的 CRLF (\r\n) 空行分隔首部部分与消息体。

简单理解:

HTTP/1.1 请求与响应共享“起始行 + 首部字段 + 空行 + 可选消息体”的文本结构;HTTP/2 和 HTTP/3 的物理承载方式不同,但保留相同的 HTTP 语义。


HTTP/1.1 文本语法 / 结构示意

+-------------------------------------------------------------------+
| 1. 起始行 (Start Line) : 请求行 (Request) / 状态行 (Response) + \r\n |
+-------------------------------------------------------------------+
| 2. 首部行 (Header Lines): Header-Name: Header-Value + \r\n (多行) |
+-------------------------------------------------------------------+
| 3. 空行 (Empty Line)   : \r\n (CRLF 核心分隔符)                    |
+-------------------------------------------------------------------+
| 4. 消息体 (Message Body): JSON / HTML / 图像等 Content (可选)        |
+-------------------------------------------------------------------+

核心内容 / 报文同构对比

在 HTTP/1.1 文本语法中,请求报文与响应报文共享相同的消息结构,二者主要区别在起始行:

报文组成请求报文 (Request Message)响应报文 (Response Message)核心区别 / 说明
第一行 (Start Line)请求行 (Request Line)
<Method> <URL> <Version>\r\n
状态行 (Status Line)
<Version> <Status-Code> <Reason>\r\n
请求行声明动作与资源路径;状态行返回处理结果状态码。
首部行 (Header Lines)<Header-Name>: <Value>\r\n
例:Host, User-Agent
<Header-Name>: <Value>\r\n
例:Server, Set-Cookie
格式完全一致,传递环境、连接控制及数据元信息。
空行 (Empty Line)\r\n\r\n完全一致。文本字节流中标识首部结束与请求体开始。
消息体 (Message Body)<Content Data><Content Data>可选;请求体承载请求内容,响应体承载响应内容。

字段拆解与细节

1. 请求行 (Request Line) vs 状态行 (Status Line)

请求行 (Request Line)

结构规范:<Method> <SP> <Request-Target> <SP> <HTTP-Version> \r\n

  • 字段顺序:方法 (Method) → 请求目标 (Request Target) → 协议版本 (Version)。
  • 典型示例GET /index.html HTTP/1.1\r\n
  • 常见 MethodGET(获取)、POST(提交数据)、HEAD(仅获取首部)、PUT(替换/创建)、DELETE(删除)。

状态行 (Status Line)

结构规范:<HTTP-Version> <SP> <Status-Code> <SP> <Reason-Phrase> \r\n

  • 字段顺序:协议版本 (Version) → 状态码 (Status-Code) → 原因短语 (Reason-Phrase)。
  • 典型示例HTTP/1.1 200 OK\r\n
  • 状态码分类
    • 1xx:信息提示(Informational)
    • 2xx:成功(Success,如 200 OK
    • 3xx:重定向(Redirection,如 301 Moved Permanently, 304 Not Modified
    • 4xx:客户端错误(Client Error,如 400 Bad Request, 404 Not Found
    • 5xx:服务端错误(Server Error,如 500 Internal Server Error, 503 Service Unavailable

2. 首部行 (Header Lines) 与空行 (Empty Line)

  • Host 首部:HTTP/1.1 唯一强制要求的首部,用于多虚拟主机路由。
  • Connection 首部:HTTP/1.1 中用于连接管理;HTTP/2 和 HTTP/3 不使用这个逐跳首部。
  • Content-Type & Content-Length:分别描述内容类型和消息体长度;是否存在消息体还要结合方法、状态码和消息分帧规则判断。
  • 空行分隔符 (\r\n):ASCII 码 0x0D 0x0A。TCP 是字节流,解析器依赖独占一行的 CRLF 识别首部边界。

Summary

HTTP/1.1 用“起始行 + 首部字段 + 空行 + 可选消息体”组织文本消息;HTTP/2 和 HTTP/3 改变了物理分帧方式,但没有改变请求与响应的核心语义。


Related Concepts(关联概念)