如何计算传输编码:分块的块大小

问题描述

我没有在 transfer-encoding: chunked 中得到它,大小是如何计算的。谁能解释一下这个块大小?谢谢。

POST / HTTP/1.1
Host: your-lab-id.web-security-academy.net
Content-length: 4
transfer-encoding: chunked

87
GET /admin/delete?username=carlos HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
Content-Length: 15

x=1
0

解决方法

在研究 http 请求走私时,我也很难弄清楚如何计算块大小。我发现维基百科中的示例非常有用(https://en.wikipedia.org/wiki/Chunked_transfer_encoding#Example)。

所以让我试着在这里帮助你,因为这对我来说实际上也是一个很好的练习。

87
GET /admin/delete?username=carlos HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
Content-Length: 15

x=1
0

87 是十六进制形式。在十进制形式中,它的值为 135。因此块大小为 135 字节。

然后,对于 87 以下的每一行,我们计算每个字符(假设 1 个字符等于 1 个字节),然后为 CRLF(\r\n)添加 2 个字节,除了 0 上面的最后一行我们不需要计算尾随的 CRLF。

所以事情是这样的:

GET /admin/delete?username=carlos HTTP/1.1 -> 42 + 2 bytes for \r\n = 44 bytes
Host: localhost -> 15 + 2 = 17 bytes
Content-Type: application/x-www-form-urlencoded -> 47 + 2 = 49 bytes
Content-Length: 15 -> 18 + 2 -> 20 bytes
 -> 0 + 2 = 2 bytes
x=1 -> 3 bytes

因此总共有 135 字节的分块数据。

希望这会有所帮助。