HTTP/2 过滤是什么
HTTP/2 不再有请求行,方法、路径与主机名都以伪头形式承载在 HEADERS 帧里,所以不能用 HTTP/1.x 的字段过滤。http2 相关字段可以按帧类型、流编号与头部名称筛选:用头部名称匹配路径、用流编号跟踪单个请求、用帧类型过滤控制帧。
基本信息
| 适用工具 | Wireshark 3.x / 4.x |
|---|---|
| 主要字段 | http2.header.name、http2.header.value、http2.streamid、http2.type |
| 伪头示例 | :method、:path、:authority |
| 前提 | 明文 HTTP/2 或已导入密钥解密 |
| 协议特点 | 多条流复用同一条连接 |
典型使用场景
- 按路径找出报错的接口请求
- 跟踪单条流查看某个请求的完整往返
- 过滤控制帧,排查流控与重置行为
- 核对前端实际请求的接口与预期是否一致
- 对比 HTTP/1.1 与 HTTP/2 环境下的请求差异
常用示例
常用示例
http2.header.name == ":path" && http2.header.value contains "/api" # 按路径过滤
http2.streamid == 3 # 跟踪单条流
http2.type == 1 # HEADERS 帧
http2 && http2.header.name == ":authority" # 按主机名字段与用途
| 字段 | 含义 | 用途 |
|---|---|---|
| http2.header.name | 头部名称(含伪头) | 按名称定位字段 |
| http2.header.value | 头部取值 | 匹配路径或主机名 |
| http2.streamid | 流编号 | 跟踪单个请求 |
| http2.type | 帧类型 | 过滤头部帧或数据帧 |
HTTP/2 跑在加密传输之上时需先完成解密,否则 http2 字段不会出现。
头部经压缩传输,抓包中看到的是解析器还原后的取值,异常时先核对解析版本。
补充要点
- 同一连接上多条流共享五元组,排查单个请求必须结合流编号
- 按流编号过滤后再看该流的完整帧序列,能判断是客户端取消还是服务端重置
- 服务器推送会额外产生流,分析时不要把推送流当成本次请求的响应
- 流编号与连接编号一起记录,复现问题会更方便
HTTP/2 的统计视图与 HTTP/1.x 分开,接口级统计需要结合路径伪头自行过滤。
补充要点
- 头部经压缩传输,分析器还原的取值需与协议版本对应
- 多路复用意味着单连接的统计不能代表单个请求的耗时
- 按流编号过滤后再看帧序列,能判断是客户端取消还是服务端重置
- 服务器推送会额外产生流,分析请求响应时要注意区分