为什么在使用传输编码标头时没有发送任何HTTP请求



这是带有POST方法和Content-Length头的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

这是带有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时,第二个样本(具有传输编码标头的HTTP请求(没有HTTP请求,取而代之的是包含HTTP请求的TCP推送数据包。

为什么会发生这种情况??

以下是两个请求的WireShark:

WireShark HTTP内容长度

WireShark HTTP传输编码

块编码传输使用十六进制格式来指示块的大小。

十六进制的11表示十进制的17(11将是b(。

这里的块大小为17字节,您的块被完全传输,但您缺少块结束标记(\r\n0\r\n\r\n(,因为它在第一个块中被吃掉:

u s e r = m e h r a n r n
1 2 3 4 5 7 8 9 a b c d  e
0 r n
f 10 11
r n
12 13

所以它要么是:

brn
user=mehranrn
0rn
rn

11rn
user=mehranrn
0rn
0rn
rn