Skip to main content

Module client

Module client 

Source
Expand description

HTTP/1.1 客户端编解码(反向代理上游转发专用)

本模块提供反向代理转发闭环的最小客户端能力:

  • encode_request:将规范化请求编码为 HTTP/1.1 线格式(固定 Connection: close, v1 不做上游 keep-alive 复用)
  • parse_response增量式响应解析——数据不足返回 Ok(None), 完整响应返回 Ok(Some((响应, 消费字节数)))
  • parse_response_eof:connection-close 语义兜底——无 Content-Length 且无 Transfer-Encoding 时,由调用方读到 EOF 后调用,剩余字节全部视为 body

支持的三种 body 分帧(严格 RFC 7230 §3.3.3,与服务端 parser 同一套语义):

  1. Transfer-Encoding: chunked → 完整 chunked 解码(十六进制块大小、CRLF、 零块终止、trailer 忽略)
  2. Content-Length: N → 恰好 N 字节
  3. 两者皆无 → connection-close(读到 EOF,由 parse_response_eof 兜底)

§安全保证(fail-closed)

  • method/path/host/头名/头值含 \r\nencode_request 返回 None (CRLF 注入防护,绝不静默放行)
  • 响应头区超过 MAX_HEADER_SECTION(64 KiB,无论终止标记是否已找到)→ Err
  • 响应头条数 / 单名 / 单值超 MAX_HEADER_COUNT / MAX_HEADER_NAME_LEN / MAX_HEADER_VALUE_LEN → Err(与服务端 parser 防线对称,M-4)
  • Content-Length 与 Transfer-Encoding 共存 / 多个不同的 Content-Length → Err (请求走私防护)
  • 非法状态行 / 非法头部 → Err,绝不截断放行

Structs§

ClientResponse
上游响应(代理解析结果)
ResponseParser
有状态增量响应解析器

Enums§

ClientError
代理客户端错误

Constants§

MAX_BODY_BYTES
上游响应 body 硬上限(64 MiB),超限 fail-closed
MAX_HEADER_COUNT
响应头条数硬上限(与服务端 parser max_header_count 默认 256 对称,M-4)
MAX_HEADER_NAME_LEN
单个响应头名硬上限(与服务端 parser max_header_name_len 默认 64 对称,M-4)
MAX_HEADER_SECTION
响应头区硬上限(64 KiB,含 \r\n\r\n 终止标记),超限 fail-closed
MAX_HEADER_VALUE_LEN
单个响应头值硬上限(与服务端 parser max_header_value_len 默认 8192 对称,M-4)

Functions§

encode_request
编码 HTTP/1.1 请求(代理转发上游)
parse_response
增量解析 HTTP/1.1 上游响应
parse_response_eof
EOF 兜底解析(connection-close 语义)