--- title: "HTTP Content-Type 必需配置" date: 2026-02-06 lastmod: 2026-02-06 description: "控制 HTTP Content-Type 头必需性的配置说明" tags: ["HTTP", "请求验证", "已弃用"] summary: "配置项作用 # http.content_type.required 配置项强制要求 HTTP 请求必须包含有效的 Content-Type 头。 是否可选 # 否(此配置已弃用,始终为 true) 默认值 # true (强制要求 Content-Type) 配置项类型 # 已弃用 - 此配置项仅为滚动升级兼容性保留,实际值始终为 true 配置格式 # # 此配置已弃用,无法设置为 false # 如果尝试设置为 false 会抛出异常 http.content_type.required: true 工作原理 # ┌─────────────────────────────────────────────────────────┐ │ HTTP 请求验证 │ └─────────────────────────────────────────────────────────┘ 客户端请求 │ ▼ 检查 Content-Type 头 │ ├── 存在且有效 → 继续处理 │ └── 缺失或无效 → 拒绝请求 返回 400 错误 重要说明 # 此配置项已弃用,存在原因仅为滚动升级兼容性:" --- ## 配置项作用 `http.content_type.required` 配置项强制要求 HTTP 请求必须包含有效的 Content-Type 头。 ## 是否可选 否(此配置已弃用,始终为 true) ## 默认值 ``` true (强制要求 Content-Type) ``` ## 配置项类型 **已弃用** - 此配置项仅为滚动升级兼容性保留,实际值始终为 true ## 配置格式 ```yaml # 此配置已弃用,无法设置为 false # 如果尝试设置为 false 会抛出异常 http.content_type.required: true ``` ## 工作原理 ``` ┌─────────────────────────────────────────────────────────┐ │ HTTP 请求验证 │ └─────────────────────────────────────────────────────────┘ 客户端请求 │ ▼ 检查 Content-Type 头 │ ├── 存在且有效 → 继续处理 │ └── 缺失或无效 → 拒绝请求 返回 400 错误 ``` ## 重要说明 此配置项已弃用,存在原因仅为滚动升级兼容性: 1. **无法禁用** - 设置为 false 会抛出异常 2. **始终强制** - 所有请求必须包含 Content-Type 3. **硬编码** - 实际值始终为 true ## 请求验证 Easysearch 要求所有有内容的请求必须包含 Content-Type 头: **有效的 Content-Type:** ```bash # JSON 请求 curl -X POST "http://localhost:9200/_search" \ -H "Content-Type: application/json" \ -d '{"query": {"match_all": {}}}' # Bulk API curl -X POST "http://localhost:9200/_bulk" \ -H "Content-Type: application/x-ndjson" \ --data-binary @data.json ``` ## 错误示例 **缺少 Content-Type:** ```bash curl -X POST "http://localhost:9200/_search" \ -d '{"query": {"match_all": {}}}' ``` **错误响应:** ```json { "error": "Content-Type header [application/json] is missing", "status": 406 } ``` ## 配置验证 ```bash # 查看当前配置(始终为 true) GET /_nodes/settings?filter_path=nodes.*.http.content_type.required ``` ## 注意事项 1. **已弃用** - 此配置项仅为兼容性保留 2. **无法禁用** - 设置为 false 会抛出 IllegalArgumentException 3. **强制验证** - 所有请求必须包含 Content-Type 4. **滚动升级** - 用于旧版本升级时的兼容性 ## 正确的 Content-Type | 操作 | Content-Type | |------|-------------| | 搜索/查询 | `application/json` | | Bulk API | `application/x-ndjson` | | 索引文档 | `application/json` | | 更新文档 | `application/json` | ## 完整配置示例 ```yaml # easysearch.yml # 此配置已弃用,无需显式设置 # 系统会自动强制要求 Content-Type # 正确的请求示例 # curl -H "Content-Type: application/json" ... ```