【问题标题】:How to count Transfer-Encoding: chunked chunk size如何计算传输编码:分块的块大小
【发布时间】:2021-05-01 00:28:44
【问题描述】:

我在 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

【问题讨论】:

  • 您的问题和示例内容不符。那里没有提到Transfer-encoding: chunked,不是15字节的数据...开头的87是什么...?
  • 对不起,我只是想了解块大小,但我编辑了帖子,它有完整的请求。
  • 这仍然没有意义。您声称要在 Content-length 标头中发送 4 个字节的内容,然后您的块标头说“这里是该块中的 87 个字节”。
  • 你读过维基百科的文章吗? en.wikipedia.org/wiki/Chunked_transfer_encoding#Format

标签: html transfer-encoding


【解决方案1】:

在研究 http 请求走私时,我也很难弄清楚如何计算块大小。我发现 wikipedia 中的示例非常有帮助 (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 字节的分块数据。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2013-05-03
    • 2011-04-10
    • 1970-01-01
    • 2012-11-02
    • 2013-02-13
    • 2012-02-18
    相关资源
    最近更新 更多