HTTP报文详解

HTTP 报文详解

HTTP(Hypertext Transfer Protocol,超文本传输协议)是 Web 通信的基础协议,用于客户端(如浏览器)和服务器之间交换数据。HTTP 报文 是 HTTP 协议交互的信息载体,分为两种类型:请求报文(由客户端发送)和响应报文(由服务器返回)。报文是纯文本格式(HTTP/1.1 和早期版本),由 ASCII 字符组成,便于阅读和调试。

HTTP 报文的基本结构相同,由三部分组成:

  • 起始行(Start Line):描述请求或响应的基本信息。
  • 首部字段(Headers):键值对形式,提供元数据(如内容类型、长度、缓存等)。
  • 空行(CRLF):分隔首部和主体,表示首部结束。
  • 主体(Body,可选):实际传输的数据(如 HTML、JSON、图片等)。

1. 请求报文(Request Message)

客户端向服务器请求资源时发送。

格式

<方法> <请求URL> <协议版本>
<首部字段名>: <字段值>
...

<CRLF>  // 空行
<主体数据>  // 可选

起始行(Request-Line)

  • 方法(Method):表示对资源的操作。常见方法: 方法 描述 是否有主体 GET 获取资源(最常用) 无 POST 提交数据(如表单) 有 PUT 上传资源(替换) 有 DELETE 删除资源 无 HEAD 只获取响应头(不返回主体) 无 OPTIONS 查询支持的方法 无 TRACE 回环测试 无 PATCH 部分更新资源 有
  • 请求URL(Request-URI):资源路径,可包含查询参数(如 /index.html?id=1)。
  • 协议版本:通常 HTTP/1.1HTTP/2(HTTP/2+ 使用二进制帧)。

示例(GET 请求,无主体):

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: text/html,*/*
Accept-Encoding: gzip, deflate
Connection: keep-alive

示例(POST 请求,有主体):

POST /login HTTP/1.1
Host: www.example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 28

username=admin&password=123

2. 响应报文(Response Message)

服务器处理请求后返回。

格式

<协议版本> <状态码> <原因短语>
<首部字段名>: <字段值>
...

<CRLF>  // 空行
<主体数据>  // 可选

起始行(Status-Line)

  • 协议版本:同上。
  • 状态码(Status Code):三位数字,表示结果。 分类 代码范围 描述 常见示例 1xx 100-101 信息提示 100 Continue 2xx 200-206 成功 200 OK, 204 No Content 3xx 300-307 重定向 301 Moved Permanently, 304 Not Modified 4xx 400-451 客户端错误 400 Bad Request, 404 Not Found, 403 Forbidden 5xx 500-505 服务器错误 500 Internal Server Error, 503 Service Unavailable
  • 原因短语(Reason Phrase):人类可读描述,如 “OK”。

示例(成功响应):

HTTP/1.1 200 OK
Date: Mon, 06 Jan 2026 12:00:00 GMT
Server: Apache/2.4.51
Content-Type: text/html; charset=UTF-8
Content-Length: 1234
Connection: keep-alive

<html><body>Hello World!</body></html>

示例(404 错误):

HTTP/1.1 404 Not Found
Content-Type: text/html
Content-Length: 256

<html><body><h1>404 Not Found</h1></body></html>

3. 首部字段(Headers)

首部是键值对,提供附加信息。分为:

  • 通用首部:请求和响应均可(如 Date、Connection)。
  • 请求首部:如 Host、User-Agent、Accept、Cookie。
  • 响应首部:如 Server、Location(重定向)、Set-Cookie。
  • 实体首部:描述主体,如 Content-Type、Content-Length、Content-Encoding(gzip)。

常见首部:

首部示例值描述
Hostwww.example.com主机名(虚拟主机必需)
Content-Typetext/html; charset=utf-8主体类型
Content-Length1234主体长度
Connectionkeep-alive连接类型(长连接)
Cache-Controlno-cache缓存控制
Cookiesession=abc123客户端发送 Cookie
Set-Cookiesession=abc123; Expires=…服务器设置 Cookie

4. 注意事项与扩展

  • 空行:必须有,用于分隔首部和主体。没有主体时,直接以空行结束。
  • 主体传输:使用 Content-Length 或 Transfer-Encoding: chunked(分块传输)。
  • HTTP 版本差异:HTTP/1.1 支持长连接(keep-alive);HTTP/2+ 使用二进制帧,更高效,但语义相同(RFC 9110 定义最新语义)。
  • 工具查看:浏览器 DevTools(Network 标签)、Wireshark、curl、Postman。
  • 安全:HTTPS 在 TLS 层加密报文。

HTTP 报文简单却强大,是理解 Web 工作的关键。如果需要特定示例、某个首部的深入解释或 HTTP/2+ 差异,欢迎继续提问!

文章已创建 3707

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部