Elasticsearch报406错误:Content-Type头不支持问题求助
解决Elasticsearch 406 Content-Type头不支持错误
这个406 Not Acceptable错误本质是Elasticsearch服务器要求请求必须携带合法的Content-Type头,但你的Ruby客户端发送请求时没有设置该头,或者设置不符合服务器要求。结合你使用的elasticsearch-transport-2.0.0版本,我整理了几个针对性的解决办法:
1. 优先校验客户端与ES服务器的版本兼容性
elasticsearch-ruby客户端和Elasticsearch服务器是强版本绑定的:你当前用的2.0.0客户端对应ES 2.x版本,如果你的ES服务器是5.x及以上,版本不兼容就会导致客户端自动生成的请求头不符合服务器规范。
- 先确认ES服务器版本:访问你的ES地址(比如
http://localhost:9200),返回的JSON中version.number字段就是服务器版本。 - 安装匹配的客户端版本:如果服务器是5.x,就安装对应大版本的客户端,命令示例:
gem install elasticsearch -v 5.6.16 # 替换为和服务器一致的小版本
2. 手动强制设置全局请求头
如果暂时不想升级客户端,可以在初始化ES客户端时全局添加默认Content-Type头,确保所有请求都符合服务器要求:
client = Elasticsearch::Client.new( hosts: ['你的ES地址:端口'], headers: { 'Content-Type' => 'application/json' } )
如果只是个别请求出问题,也可以单独给该请求追加头信息:
client.index( index: 'your_index', body: { title: '测试内容' }, headers: { 'Content-Type' => 'application/json' } )
3. 排查请求体格式合法性
额外注意:如果请求体不是合法的JSON格式,也可能间接导致头信息处理异常。确保你传入的body参数是Ruby哈希(客户端会自动序列化为JSON),而非原始字符串或其他格式。
按照上述步骤操作,应该就能快速解决这个406错误了。
内容的提问来源于stack exchange,提问作者Mirror318
相关产品推荐
相关产品推荐

