--- title: "HTTP 请求体最大长度配置" date: 2026-03-20 lastmod: 2026-03-20 description: "控制 HTTP 请求体最大长度的配置说明" tags: ["HTTP", "请求限制", "安全配置"] summary: "配置项作用 # http.max_content_length 配置项限制 HTTP 服务器接受的最大请求体大小,防止过大的请求耗尽服务器内存。 是否可选 # 是 默认值 # 100mb 配置项类型 # 静态配置 - 需要重启节点才能生效 配置格式 # # 默认配置 http.max_content_length: 100mb # 增加限制 http.max_content_length: 500mb # 减少限制 http.max_content_length: 50mb # 使用其他单位 http.max_content_length: 1gb http.max_content_length: 104857600b 有效范围 # 最小值:0b(实际上不限制) 最大值:约 2GB(Integer.MAX_VALUE 字节) 支持的单位 # b - 字节 kb - 千字节 mb - 兆字节 gb - 吉字节 tb - 太字节 pb - 拍字节 工作原理 # HTTP 服务器使用 Netty 的 HttpObjectAggregator 聚合 HTTP 分块:" --- ## 配置项作用 `http.max_content_length` 配置项限制 HTTP 服务器接受的最大请求体大小,防止过大的请求耗尽服务器内存。 ## 是否可选 是 ## 默认值 ``` 100mb ``` ## 配置项类型 **静态配置** - 需要重启节点才能生效 ## 配置格式 ```yaml # 默认配置 http.max_content_length: 100mb # 增加限制 http.max_content_length: 500mb # 减少限制 http.max_content_length: 50mb # 使用其他单位 http.max_content_length: 1gb http.max_content_length: 104857600b ``` ## 有效范围 - **最小值**:0b(实际上不限制) - **最大值**:约 2GB(Integer.MAX_VALUE 字节) ## 支持的单位 - `b` - 字节 - `kb` - 千字节 - `mb` - 兆字节 - `gb` - 吉字节 - `tb` - 太字节 - `pb` - 拍字节 ## 工作原理 HTTP 服务器使用 Netty 的 `HttpObjectAggregator` 聚合 HTTP 分块: ``` ┌─────────────────────────────────────────────────────────┐ │ HTTP 请求处理 │ └─────────────────────────────────────────────────────────┘ │ ▼ ┌───────┴────────┐ │ 接收请求 │ │ 检查大小 │ └───────┬────────┘ │ ▼ ┌───────┴────────┐ │ │ 请求体 <= 限制 请求体 > 限制 │ │ ▼ ▼ 继续处理 拒绝请求 返回 413 错误 ``` ## 推荐设置 | 场景 | 推荐值 | 说明 | |------|--------|------| | 默认配置 | 100mb | 适用于大多数场景 | | 大批量导入 | 500mb-1gb | 支持大批量操作 | | API 服务 | 10-50mb | 限制请求大小 | | 安全优先 | 10mb | 防止大请求攻击 | ## 使用示例 **默认配置:** ```yaml http.max_content_length: 100mb ``` **大批量文档导入:** ```yaml # 支持 bulk API 导入大量文档 http.max_content_length: 500mb ``` **限制资源使用:** ```yaml # 防止大请求占用过多内存 http.max_content_length: 50mb ``` ## 何时调整此设置 **增加限制的情况:** - 需要上传大文件(如 PDF、图片) - 使用 `_bulk` API 进行大批量操作 - 发送包含大量过滤条件的复杂查询 **保持默认或减少的情况:** - 防止大请求 DoS 攻击 - 内存资源有限 - 需要限制上传大小的安全考虑 ## 内存影响 - 限制值越大,每个请求占用的内存越多 - 影响 Netty 内部缓冲区管理 - 默认 100MB 下允许约 69,905 个缓冲区组件(基于 1500 字节 MTU) ## 配置验证 ```bash # 查看当前配置 GET /_nodes/settings?filter_path=nodes.*.http.max_content_length # 测试大文件上传 curl -X POST "http://localhost:9200/_bulk" -H "Content-Type: application/x-ndjson" --data-binary @large_file.json ``` ## 常见问题 **问题 1:请求被拒绝** **错误信息:** ``` status: 413 error: entity content is too large ``` **解决方案:** ```yaml # 增加限制 http.max_content_length: 500mb ``` **问题 2:内存不足** **症状:** - 节点内存使用率过高 - 频繁 GC **解决方案:** ```yaml # 减少限制 http.max_content_length: 50mb ``` ## 安全建议 **生产环境配置:** 1. **根据实际需求设置** ```yaml # 只设置需要的最大值 http.max_content_length: 100mb ``` 2. **配合其他限制** - 启用请求速率限制 - 配置身份认证 - 监控异常请求 3. **不同环境不同配置** ```yaml # 开发环境:允许更大请求 http.max_content_length: 500mb # 生产环境:严格限制 http.max_content_length: 100mb ``` ## 相关配置项 | 配置项 | 默认值 | 说明 | |-------|-------|------| | `http.max_header_size` | 8kb | 请求头最大大小 | | `http.max_initial_line_length` | 4kb | 请求行最大长度 | | `http.max_chunk_size` | 8kb | 分块传输最大大小 | ## 注意事项 1. **静态配置**:修改限制需要重启节点 2. **内存影响**:较大的值会增加内存使用 3. **安全考虑**:生产环境不应设置过高的值 4. **批量操作**:大批量操作可能需要增加此值 5. **错误处理**:超出限制会返回 HTTP 413 错误