refactor(compression): 请求压缩策略改为跟随客户端行为,响应支持gzip压缩

- 移除全局 ENABLE_REQUEST_COMPRESSION 配置,改为根据客户端 Content-Encoding
  决定是否对上游请求体进行 gzip 压缩
- 非流式响应根据客户端 Accept-Encoding 返回 gzip 压缩的 JSON
- ApiRequestContext 记录客户端编码偏好并透传至 handler 链路
- 新增 http_compression 模块统一处理压缩相关判断逻辑
- 上游请求头丢弃列表新增 content-encoding 防止客户端值泄露
- ensure_json_body 支持解压 gzip 编码的请求体
This commit is contained in:
fawney19
2026-03-01 15:52:32 +08:00
parent 2dcccc9820
commit 2c1e51a490
16 changed files with 469 additions and 47 deletions

View File

@@ -182,16 +182,6 @@ class Config:
# - 三家上游Claude/OpenAI/Gemini均已确认支持 HTTP/2
# - 出现兼容性问题时可通过环境变量快速回退到 HTTP/1.1
self.enable_http2 = os.getenv("ENABLE_HTTP2", "true").lower() == "true"
# ENABLE_REQUEST_COMPRESSION: 是否对上游请求体启用 gzip 压缩
# - 仅对超过 REQUEST_COMPRESSION_MIN_SIZE 的请求体生效
# - 上游 Cloudflare/Google Front End 层会透明解压
self.enable_request_compression = (
os.getenv("ENABLE_REQUEST_COMPRESSION", "true").lower() == "true"
)
# REQUEST_COMPRESSION_MIN_SIZE: 触发请求体压缩的最小字节数
# - gzip 有固定头部开销,小请求压缩后可能反而变大
# - 默认 1024 字节1KB
self.request_compression_min_size = int(os.getenv("REQUEST_COMPRESSION_MIN_SIZE", "1024"))
# 流式处理配置
# STREAM_PREFETCH_LINES: 预读行数,用于检测嵌套错误