問題一:Content-Type header is not supported

DRose發表於2020-06-29

問題描述


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 協議》,轉載必須註明作者和本文連結

相關文章