問題描述
curl -s -XPOST "localhost:9200/get-together/group/1" -d'{
"name": "Denver Clojure",
"organizer": ["Daniel", "Lee"],
"description": "Group of Clojure enthusiasts from Denver who want to hack on code together and learn more about Clojure",
"created_on": "2012-06-15",
"tags": ["clojure", "denver", "functional programming", "jvm", "java"],
"members": ["Lee", "Daniel", "Mike"],
"location_group": "Denver, Colorado, USA"
}'
在執行上述建立索引的時候,報如下錯誤:
{"error":"Content-Type header [application/x-www-form-urlencoded] is not supported","status":406}%
問題原因
strict-content-type-checking-for-elasticsearch-rest-requests
是因為在 ES6.0 之後,ES 對 content-type 的檢測更為嚴格,在 ES 的早期版本中,content-type 是可選的,如果預設或者 ES 無法辨別,ES 會根據請求內容進行猜測。
這個功能最先出現在 5.3 版本,http.content_type.required
是在配置中的,在 5.x 版本中,預設引數是 false,但是在 6.0 版本中,這個引數是 true,並且不能改變。
為什麼要對這個做出改變呢,是因為隨著 ES 的發展,ES 認為可靠性和可預測性更重要,猜測一定會猜錯,但是增加了一點點內容,有助於安全和清晰,這是非常明智的。
解決方案
在請求時增加 content-type 型別
curl -H 'Content-Type: application/json' -s -XPOST "localhost:9200/get-together/group/1" -d'{
"name": "Denver Clojure",
"organizer": ["Daniel", "Lee"],
"description": "Group of Clojure enthusiasts from Denver who want to hack on code together and learn more about Clojure",
"created_on": "2012-06-15",
"tags": ["clojure", "denver", "functional programming", "jvm", "java"],
"members": ["Lee", "Daniel", "Mike"],
"location_group": "Denver, Colorado, USA"
}'
本作品採用《CC 協議》,轉載必須註明作者和本文連結