应用层报文判读71 条

HTTP 请求行判读

请求行由方法、目标与版本三部分组成:用 http.request 过滤出全部请求,再按 method / uri / version 字段分列核对,快速定位方法或目标异常。

HTTP 请求行判读

HTTP 请求行由三部分组成:方法、请求目标与协议版本,例如「GET /api/v1/orders HTTP/1.1」。用 http.request 可以把全部请求过滤出来,再按方法、请求目标、版本三个字段分列核对,方法或路径出现异常时一眼能看出来。字段解析需要完整的请求行,报文分片不全时会退化成原始数据。

基本信息

适用平台Wireshark 3.x/4.x,解析 HTTP/1.x 报文
相关字段http.request.method、http.request.uri、http.request.version
协议依据RFC 9112(HTTP/1.1 报文语法)
解析前提请求行完整捕获且该端口已被识别为 HTTP

典型使用场景

  • 核对方法分布:统计各方法占比是否与业务预期一致
  • 定位异常路径:按路径片段筛出报错或调试接口
  • 检查协议版本:确认客户端是否仍在使用 HTTP/1.0
  • 判断代理转发:请求目标出现完整地址说明经过代理
  • 与响应串联:把请求与对应响应码连起来形成完整证据

常用过滤

常用过滤
http.request                              # 全部请求
http.request.method == "POST"             # 只看提交类请求
http.request.uri contains "/api/v1"       # 按路径筛选
http.request.version == "HTTP/1.1"         # 核对协议版本

请求行组成

组成示例判读要点
方法GET、POST、PUT区分大小写,异常代理可能原样转发错误写法
请求目标/api/v1/orders?page=2出现绝对地址说明经过代理
协议版本HTTP/1.1出现 1.0 说明客户端实现较旧
行结尾回车换行缺失会直接导致解析失败
方法名区分大小写,规范实现只接受大写形式。抓包里看到小写方法名,通常说明中间代理原样转发了异常请求,需要回到代理层核查。
请求目标里出现完整的绝对地址,说明这条请求是发给代理的;直连服务器的请求一般只写路径。两种形态混用时,可以判断流量走了不同的转发路径。
端口不在 Wireshark 默认的 HTTP 端口列表里时,需要先在协议首选项里把它加进去,否则报文只会显示成 TCP 数据,看不到任何 http 字段。

易错点

  • 方法名区分大小写,异常代理可能原样转发错误大小写的方法
  • 请求行里出现绝对 URI 说明经代理转发,与直接请求形态不同
  • 非标准端口上的 HTTP 不会被自动解析,需要手工加入端口列表才看得到字段
  • 报文分片不全时字段缺失,此时别按「没有请求」下结论,先确认抓包完整性

数据来源与参考

  • RFC 9112(HTTP/1.1 报文)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌