You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:33:03