--- title: "HTTP 请求头最大大小配置" date: 2026-03-08 lastmod: 2026-03-08 description: "控制 HTTP 请求头最大大小的配置说明" tags: ["HTTP", "请求头", "安全配置"] summary: "配置项作用 # http.max_header_size 配置项限制 HTTP 请求头的最大大小,防止客户端发送过大的请求头耗尽服务器资源。 是否可选 # 是 默认值 # 8kb 配置项类型 # 静态配置 - 需要重启节点才能生效 配置格式 # # 默认配置 http.max_header_size: 8kb # 增加限制 http.max_header_size: 16kb # 减少限制 http.max_header_size: 4kb 支持的单位 # b / bytes - 字节 kb - 千字节 mb - 兆字节 gb - 吉字节 工作原理 # ┌─────────────────────────────────────────────────────────┐ │ HTTP 请求处理 │ └─────────────────────────────────────────────────────────┘ 客户端请求 │ ▼ 读取请求头 │ ├── 计算请求头大小 ├── 检查是否超过限制 │ ├── 超过限制 → 拒绝请求 │ 返回 431 错误 │ └── 未超过 → 继续处理 推荐设置 # 场景 推荐值 说明 默认配置 8kb 适用于大多数场景 大 Cookie 16kb 需要 Cookie 较大时 自定义头多 16-32kb 大量自定义头 安全优先 4kb 更严格的限制 使用示例 # 默认配置:" --- ## 配置项作用 `http.max_header_size` 配置项限制 HTTP 请求头的最大大小,防止客户端发送过大的请求头耗尽服务器资源。 ## 是否可选 是 ## 默认值 ``` 8kb ``` ## 配置项类型 **静态配置** - 需要重启节点才能生效 ## 配置格式 ```yaml # 默认配置 http.max_header_size: 8kb # 增加限制 http.max_header_size: 16kb # 减少限制 http.max_header_size: 4kb ``` ## 支持的单位 - `b` / `bytes` - 字节 - `kb` - 千字节 - `mb` - 兆字节 - `gb` - 吉字节 ## 工作原理 ``` ┌─────────────────────────────────────────────────────────┐ │ HTTP 请求处理 │ └─────────────────────────────────────────────────────────┘ 客户端请求 │ ▼ 读取请求头 │ ├── 计算请求头大小 ├── 检查是否超过限制 │ ├── 超过限制 → 拒绝请求 │ 返回 431 错误 │ └── 未超过 → 继续处理 ``` ## 推荐设置 | 场景 | 推荐值 | 说明 | |------|--------|------| | 默认配置 | 8kb | 适用于大多数场景 | | 大 Cookie | 16kb | 需要 Cookie 较大时 | | 自定义头多 | 16-32kb | 大量自定义头 | | 安全优先 | 4kb | 更严格的限制 | ## 使用示例 **默认配置:** ```yaml http.max_header_size: 8kb ``` **增加限制:** ```yaml # 应用程序使用大量 Cookie 或自定义头 http.max_header_size: 16kb ``` **安全限制:** ```yaml # 更严格的限制 http.max_header_size: 4kb ``` ## 何时调整此设置 **需要增加的情况:** - 应用程序使用大量 Cookie - 大量自定义 HTTP 头 - 认证 Token 较大 - 代理转发添加头信息 **需要减少的情况:** - 增强安全性 - 防止攻击 - 限制资源使用 ## 超出限制的处理 当请求头超过限制时: 1. 连接被拒绝 2. 返回 HTTP 431 错误 3. 请求不会被处理 ## 配置验证 ```bash # 查看当前配置 GET /_nodes/settings?filter_path=nodes.*.http.max_header_size # 测试大请求头 curl -H "X-Large: $(python -c 'print("A"*10000)')" http://localhost:9200/ ``` ## 常见问题 **问题 1:请求被拒绝** **错误信息:** ``` status: 431 error: Request exceeded the maximum size of task headers ``` **解决方案:** ```yaml # 增加限制 http.max_header_size: 16kb ``` **问题 2:安全顾虑** **解决方案:** ```yaml # 减少限制 http.max_header_size: 4kb ``` ## 安全建议 **生产环境最佳实践:** 1. **保持默认值** ```yaml http.max_header_size: 8kb ``` 2. **根据需求调整** ```yaml # 只在必要时增加 http.max_header_size: 16kb ``` 3. **监控请求头大小** ```bash # 查看日志中的异常请求 ``` ## 注意事项 1. **静态配置**:修改限制需要重启节点 2. **标准客户端**:大多数客户端不会超过 8KB 3. **安全平衡**:限制过小可能影响正常请求 4. **资源保护**:防止大请求头攻击 ## 相关配置项 | 配置项 | 默认值 | 说明 | |-------|-------|------| | `http.max_content_length` | 100mb | 请求体最大大小 | | `http.max_initial_line_length` | 4kb | 请求行最大长度 | | `http.max_chunk_size` | 8kb | 分块传输最大大小 | ## 完整配置示例 ```yaml # easysearch.yml # 默认配置 http.max_header_size: 8kb # 需要更大请求头 http.max_header_size: 16kb ```