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 同一套语义):
Transfer-Encoding: chunked→ 完整 chunked 解码(十六进制块大小、CRLF、 零块终止、trailer 忽略)Content-Length: N→ 恰好 N 字节- 两者皆无 → connection-close(读到 EOF,由
parse_response_eof兜底)
§安全保证(fail-closed)
- method/path/host/头名/头值含
\r或\n→encode_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§
- Client
Response - 上游响应(代理解析结果)
- Response
Parser - 有状态增量响应解析器
Enums§
- Client
Error - 代理客户端错误
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 语义)