You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么使用Transfer-Encoding头的HTTP请求在Wireshark中未被识别

问题描述

这是携带Content-Length头的POST方法HTTP请求:

POST /pg3.php HTTP/1.1
Host: 10.10.10.8
Content-Type: application/x-www-form-urlencoded
Content-Length: 11
Connection: keep-alive
Cookie: pg3_cookie=123456

user=mehran

这是携带Transfer-Encoding头的POST方法HTTP请求:

POST /pg3.php HTTP/1.1
Host: 10.10.10.8
Content-Type: application/x-www-form-urlencoded
Transfer-Encoding: chunked
Connection: keep-alive
Cookie: pg3_cookie=123456

11
user=mehran
0

我在服务端使用Wireshark抓包时发现,第二个使用Transfer-Encoding头的请求未被识别为HTTP请求,仅被识别为包含HTTP请求内容的TCP push报文,第一个携带Content-Length头的请求识别正常。请问出现该现象的原因是什么?


原因说明

核心原因是你构造的分块编码HTTP请求不符合RFC 7230规范,Wireshark的HTTP解析器无法完成完整的报文校验,因此不会将其标记为HTTP协议报文,只能识别为普通TCP报文,具体问题如下:

  • 块长度字段使用了十进制值而非规范要求的十六进制值。你提交的请求体内容user=mehran实际长度为11字节(十进制),对应的十六进制表示应为B,但你填写的块长度为11,换算为十进制是17字节。HTTP解析器会尝试读取17字节的块内容,但实际仅收到11字节,长度不匹配直接导致解析中断。
  • 分块编码的结束标记不完整。按照规范,最后一个长度为0的块之后需要追加两个连续的CRLF(即空行)标识整个请求体结束,你给出的请求中0之后缺少对应的空行,也会导致解析器判定报文不完整。

如果排除报文构造问题后仍识别异常,可以排查Wireshark配置:

  • 确认Wireshark的TCP解析配置中已开启「Allow subdissectors to reassemble TCP streams」选项,HTTP分块编码的解析依赖TCP流重组能力,未开启时也可能出现单段识别失败的情况。
  • 如果请求被拆分为多个TCP段发送,可以右键点击对应TCP流选择「Follow->HTTP Stream」,即可查看重组后的完整HTTP报文。

内容的提问来源于stack exchange,提问作者mehran_2020

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 20:45:05