#3364·gunicorn

Gunicorn 从 `transfer-coding` 中错误地删除了一些字符

作者: kenballus创建于 2025年3月20日更新于 2026年9月11日
标签Feature/HttpTo ReviewWaiting for feedback

当 Gunicorn 接收带有 Transfer-Encoding: \x0b\x0c\x1c\x1d\x1e\x1f\x85\xa0chunked\x0b\x0c\x1c\x1d\x1e\x1f\x85\xa0 头的请求时,它将其视为 Transfer-Encoding: chunked。这很有用,因为它是一个请求偷渡原语。您可以通过以下方式重现此行为:

  1. 启动一个 Gunicorn 服务器,该服务器回显请求体,例如 此服务器
  2. 向其发送触发该错误的请求:
bash
printf 'POST / HTTP/1.1\r\nHost: whatever\r\nTransfer-Encoding: \x0b\x0c\x1c\x1d\x1e\x1f\x85\xa0chunked\x0b\x0c\x1c\x1d\x1e\x1f\x85\xa0\r\n\r\n1\r\nZ\r\n0\r\n\r\n' \
    | ncat localhost 80 \
    | grep "body" \
    | jq '.["body"]' \
    | xargs echo \
    | base64 -d \
    | xxd
  1. 观察消息体被解释为分块的情况:
00000000: 5a                                       Z

内容来源: benoitc/gunicorn