--- title: "HTTP 响应压缩配置" date: 2026-03-27 lastmod: 2026-03-27 description: "控制 HTTP 响应压缩的配置说明" tags: ["HTTP", "压缩", "性能优化"] summary: "配置项作用 # http.compression 配置项控制是否对 HTTP 响应进行压缩,以减少网络带宽使用并提高传输速度。 是否可选 # 是 默认值 # true (启用压缩) 配置项类型 # 静态配置 - 需要重启节点才能生效 配置格式 # # 默认启用(无需配置) http.compression: true # 禁用压缩 http.compression: false 工作原理 # 当启用压缩时,HTTP 服务器使用 Netty 的 HttpContentCompressor 压缩响应: ┌─────────────────────────────────────────────────────────┐ │ HTTP 响应处理 │ └─────────────────────────────────────────────────────────┘ │ ▼ ┌───────┴────────┐ │ 生成响应 │ │ │ ▼ │ ┌───────┴────────┐ │ │ │ │ compression=true compression=false │ │ ▼ ▼ 压缩响应 直接发送 使用 gzip │ ▼ 检查客户端 Accept-Encoding │ ├── 支持 gzip → 发送压缩数据 └── 不支持 → 发送原始数据 推荐设置 # 场景 推荐值 说明 默认配置 true 平衡带宽和 CPU 带宽受限 true 节省带宽 60-80% CPU 受限 false 避免压缩开销 开发调试 false 便于查看原始响应 生产环境 true 减少网络传输 何时启用/禁用 # 启用压缩的情况:" --- ## 配置项作用 `http.compression` 配置项控制是否对 HTTP 响应进行压缩,以减少网络带宽使用并提高传输速度。 ## 是否可选 是 ## 默认值 ``` true (启用压缩) ``` ## 配置项类型 **静态配置** - 需要重启节点才能生效 ## 配置格式 ```yaml # 默认启用(无需配置) http.compression: true # 禁用压缩 http.compression: false ``` ## 工作原理 当启用压缩时,HTTP 服务器使用 Netty 的 `HttpContentCompressor` 压缩响应: ``` ┌─────────────────────────────────────────────────────────┐ │ HTTP 响应处理 │ └─────────────────────────────────────────────────────────┘ │ ▼ ┌───────┴────────┐ │ 生成响应 │ │ │ ▼ │ ┌───────┴────────┐ │ │ │ │ compression=true compression=false │ │ ▼ ▼ 压缩响应 直接发送 使用 gzip │ ▼ 检查客户端 Accept-Encoding │ ├── 支持 gzip → 发送压缩数据 └── 不支持 → 发送原始数据 ``` ## 推荐设置 | 场景 | 推荐值 | 说明 | |------|--------|------| | 默认配置 | true | 平衡带宽和 CPU | | 带宽受限 | true | 节省带宽 60-80% | | CPU 受限 | false | 避免压缩开销 | | 开发调试 | false | 便于查看原始响应 | | 生产环境 | true | 减少网络传输 | ## 何时启用/禁用 **启用压缩的情况:** - 网络带宽有限 - 响应体积较大 - 需要加快传输速度 - 跨地域访问 **禁用压缩的情况:** - CPU 资源紧张 - 网络带宽充足 - 响应体很小 - 需要调试响应内容 ## 性能影响 **优点:** - 节省网络带宽 60-80% - 大响应传输更快 - 改善用户体验 **缺点:** - 增加 CPU 使用率 - 小响应可能因压缩而变慢 - 增加响应延迟 ## 相关配置 `http.compression_level` - 压缩级别(1-9) ```yaml http.compression: true http.compression_level: 3 # 默认值,平衡速度和压缩率 # 更高压缩率 http.compression_level: 6 # 最快速度 http.compression_level: 1 ``` **压缩级别对比:** | 级别 | 压缩率 | CPU 使用 | 速度 | 适用场景 | |------|--------|---------|------|---------| | 1 | 最低 | 最低 | 最快 | CPU 敏感 | | 3 | 中等 | 中等 | 中等 | 默认推荐 | | 6 | 较高 | 较高 | 较慢 | 带宽敏感 | | 9 | 最高 | 最高 | 最慢 | 极限压缩 | ## 配置验证 ```bash # 查看当前配置 GET /_nodes/settings?filter_path=nodes.*.http.compression* # 测试压缩 curl -H "Accept-Encoding: gzip" -I http://localhost:9200/ # 查看响应头 curl -H "Accept-Encoding: gzip" -v http://localhost:9200/ 2>&1 | grep -i "content-encoding" ``` ## 客户端兼容性 Easysearch 会检查客户端的 `Accept-Encoding` 请求头: ```bash # 支持 gzip 的请求 curl -H "Accept-Encoding: gzip" http://localhost:9200/ # 不支持 gzip 的请求 curl -H "Accept-Encoding: identity" http://localhost:9200/ ``` ## 使用示例 **默认配置(推荐):** ```yaml http.compression: true http.compression_level: 3 ``` **禁用压缩:** ```yaml http.compression: false ``` **最大压缩:** ```yaml http.compression: true http.compression_level: 9 ``` ## 注意事项 1. **静态配置**:修改压缩设置需要重启节点 2. **CPU 开销**:压缩会增加 CPU 使用率 3. **自动处理**:客户端支持 gzip 时自动压缩 4. **小响应**:小响应可能因压缩开销而变慢 5. **推荐级别**:级别 3 在速度和压缩率之间取得最佳平衡 ## 相关配置项 | 配置项 | 默认值 | 说明 | |-------|-------|------| | `http.compression_level` | 3 | 压缩级别(1-9) | | `transport.compress` | false | 传输层压缩 | ## 监控指标 启用压缩后应监控: - CPU 使用率 - 网络带宽使用 - 平均响应时间 - 压缩率 ```bash # 查看节点统计 GET /_nodes/stats/http?filter_path=nodes.*.http.* ```