HTTP 协议基本格式与 Fiddler 抓包实战总结
HTTP(超文本传输协议)是 Web 通信的基石,理解它的报文格式是排查问题的第一步。而 Fiddler 则是观察 HTTP 通信最直观的窗口,它将抽象的协议文本变成了可以查看、甚至修改的会话。
本文先梳理 HTTP 请求与响应的标准格式,再介绍 Fiddler 的核心功能,最后将它们结合起来,看看如何在抓包工具中读懂一次真实的 HTTP 交互。
一、HTTP 报文的基本格式
HTTP 报文分为请求报文 和响应报文 ,结构上高度相似,都由三大部分组成:起始行 + 头部字段集合 + 消息正文 ,中间用一个空行将头部与正文隔开。
text
起始行
头部字段1: 值1
头部字段2: 值2
空行
消息正文(可选)
空行不是可有可无的装饰,它是头部结束、正文开始的唯一分界标志。如果在头部中间多了一个空行,空行之后的内容会被整体视为正文。
1. 请求报文
请求报文的起始行称为请求行,格式为:
text
请求方法 请求目标(URI) HTTP版本
例如:
http
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
请求方法表达对资源的"动作意图"。常见的包括:
GET:获取资源,参数通常附在 URL 上。POST:提交数据,参数放在请求体中。PUT:修改资源。DELETE:删除资源。HEAD:只获取响应头,不获取正文。OPTIONS:查询服务器支持的请求方法,常用于跨域预检。
GET 与 POST 的差异不仅在于参数位置。GET 是幂等的(重复执行结果一致),会被浏览器缓存;POST 默认不幂等,也不会被缓存,更适合传输敏感或会产生副作用的数据。
2. 响应报文
响应报文的起始行称为状态行,格式为:
text
HTTP版本 状态码 原因短语
例如:
http
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 28
{"code":0,"msg":"success"}
状态码用一个三位数字概括处理结果:
| 类别 | 含义 | 常见例子 |
|---|---|---|
1xx |
信息性状态 | 100 Continue |
2xx |
成功 | 200 OK、201 Created |
3xx |
重定向 | 301 Moved Permanently、302 Found |
4xx |
客户端错误 | 400 Bad Request、404 Not Found |
5xx |
服务器错误 | 500 Internal Server Error |
原因短语是给人看的补充说明,程序判断结果应以状态码为准。
3. 头部字段的关键规则
头部字段是 key: value 形式的键值对,规则虽然简单,但细节决定了它们能否被正确解析:
- 字段名不区分大小写 ,但习惯上采用首字母大写的连字符形式(如
Content-Type)。 - 字段名后必须紧跟冒号,冒号前不能有空格;冒号后的值前可以有空格。
- 字段名中不能出现空格 ,可以使用连字符
-,但下划线_可能导致部分服务器不解析。 - 字段顺序没有语义,可以任意排列。
- 字段一般不能重复,除非该字段本身的语义允许(如
Set-Cookie)。
常见的头部字段大致分为三类:
- 请求字段 :只在请求中出现,如
Host(目标主机)、Referer(来源页面)。 - 响应字段 :只在响应中出现,如
Server(服务器软件信息)、Set-Cookie。 - 通用字段 :请求和响应都可以出现,如
Content-Type(正文类型)、Connection(连接管理)、Cache-Control(缓存策略)。
二、Fiddler 的核心用法
Fiddler 的工作原理是在本地启动一个代理服务器 (默认端口 8888),所有经过它的 HTTP/HTTPS 流量都会被截获并记录下来。它不是"被动地看",而是站在客户端和服务器之间,因此不仅能查看,还能修改、重放、伪造。
1. 必做配置:让 HTTPS 可读
Fiddler 默认无法解密 HTTPS,只能看到加密的隧道。要查看 HTTPS 的明文内容,必须完成证书信任:
- 打开 Tools → Options → HTTPS。
- 勾选 Capture HTTPS CONNECTs 和 Decrypt HTTPS traffic。
- 点击 Actions → Trust Root Certificate,按提示将 Fiddler 的根证书安装到系统中。
- 重启 Fiddler 使配置生效。
对于移动端抓包,还需要将手机 Wi-Fi 的代理指向电脑的 IP 和 8888 端口,并在手机浏览器中访问 http://<电脑IP>:8888 下载并信任证书。
2. 界面速览:会话列表与 Inspectors
Fiddler 主界面分为左右两栏。左侧是会话列表 ,每一行代表一次完整的请求-响应交互,列出状态码、协议、主机、URL 和耗时等信息。右侧是 Inspectors 面板,用于查看选中会话的详细内容。
在 Inspectors 中,上半部分是请求 ,下半部分是响应。常用子标签包括:
- Headers:以结构化方式展示起始行和头部字段。
- WebForms:自动解析请求体中的表单参数或查询字符串。
- Raw :显示未经加工的原始报文文本,是对照 HTTP 格式最直接的视图。
- JSON / TextView:格式化展示 JSON 或文本响应,便于阅读。
双击左侧任意会话,右侧 Inspectors 就会加载该次交互的完整数据。
3. 过滤:从海量请求中定位目标
浏览器一次页面加载可能产生上百个请求。在右侧 Filters 面板中勾选 Use Filters,可以按以下条件筛选:
- Hosts :只显示特定域名,如
api.example.com。 - Client Process:只显示某个应用程序发出的请求。
- Status Code :只显示
200、404或5xx等状态码。
条件设置后点击 Run Filterset Now 立即生效。
4. 断点调试:修改请求与响应
断点是 Fiddler 最实用的调试功能之一。通过 Rules → Automatic Breakpoints 可以设置:
- Before Requests :请求到达服务器之前暂停,允许修改请求参数、头部甚至 URL。
- After Responses :响应返回客户端之前暂停,允许修改服务器返回的状态码或正文。
触发断点后,会话在左侧列表中会出现红色图标。在 Inspectors 中修改内容后,点击 Run to Completion 放行。也可以使用命令 bpu <url> 只拦截特定 URL 的请求,bpafter <url> 只拦截特定响应,避免全局断点影响所有流量。
5. Composer:手动构造与重放请求
Composer 面板允许你手动编写一个 HTTP 请求并发送。你可以直接把左侧的会话拖入 Composer,它会自动填充方法、URL、头部和正文,修改后点击 Execute 即可重放。这非常适合在调试接口时快速验证不同的参数组合。
6. AutoResponder:本地 Mock 与自动替换
AutoResponder 可以拦截匹配规则的请求,并用本地文件或预设内容代替真实服务器的响应。典型用法是前端在接口尚未开发完成时,将某个 URL 映射到一个本地 JSON 文件,让页面先跑起来。勾选 Enable rules ,添加匹配规则(如 EXACT:https://api.example.com/user),指定响应文件路径即可生效。
三、在 Fiddler 中读懂一次 HTTP 交互
把 HTTP 格式和 Fiddler 结合起来,一个典型的调试流程是这样的:
- 在左侧会话列表中,根据状态码或 URL 找到目标请求。
- 选中会话,右侧切换到 Inspectors → Raw ,你会看到和本文第一部分完全一致的报文结构:
- 上半部分的起始行是
GET /api/user HTTP/1.1或POST /api/login HTTP/1.1,下面是Host、Content-Type等头部字段,空行之后是请求体(如果有)。 - 下半部分的起始行是
HTTP/1.1 200 OK,下面是响应头部,空行之后是返回的 JSON 或 HTML。
- 上半部分的起始行是
- 如果响应格式异常或字段缺失,可以在 Headers 和 JSON 视图之间对照,快速定位是头部协商问题(如
Content-Type不匹配)还是正文数据问题。 - 需要复现问题时,用 Composer 重放请求,或设置 Before Requests 断点逐次修改参数,观察响应变化。
Fiddler 的价值在于它把 RFC 文档中抽象的"起始行、头部、空行、实体"变成了屏幕上可操作的文本。能准确指出一次请求的起始行、头部和正文分别在什么位置,是使用抓包工具的基本功。
四、总结
| 维度 | 核心要点 |
|---|---|
| 请求格式 | 请求行(方法 + URI + 版本)+ 头部 + 空行 + 请求体 |
| 响应格式 | 状态行(版本 + 状态码 + 原因)+ 头部 + 空行 + 响应体 |
| 头部规则 | 键值对、冒号分隔、不区分大小写、慎用下划线 |
| Fiddler 定位 | 本地代理,截获、查看、修改、重放 HTTP/HTTPS 流量 |
| 必做配置 | 信任根证书,开启 HTTPS 解密 |
| 核心面板 | 会话列表 + Inspectors(查看)、Filters(筛选)、断点(修改)、Composer(重放)、AutoResponder(Mock) |
HTTP 格式是"协议的规定",Fiddler 是"观察协议的眼睛"。先记住报文的三段式结构和空行的分界作用,再熟练使用 Fiddler 的 Raw 视图和断点功能,排查网络问题时就能做到有据可依、有的放矢。