ElasticSearch не может распознать заголовок Context-Type с определенной кодировкой

Я потратил некоторое время, пытаясь исправить предупреждение о массовой загрузке эластичного поиска:

Определение типа контента для запросов на отдых не рекомендуется. Укажите тип содержимого с помощью заголовка [Content-Type]

Мой запрос ниже:

POST http://elasticserver/_bulk HTTP/1.1
Authorization: xxx
Content-Type: application/x-ndjson; charset=utf-8
Host: elasticserver
Content-Length: 8559

... new line delimited json content ...

И мой действительный ответ со статусом 200 ниже:

HTTP/1.1 200 OK
Warning: 299 Elasticsearch-5.5.1-19c13d0 "Content type detection for rest requests is deprecated. Specify the content type using the [Content-Type] header." "Mon, 14 Aug 2017 00:46:21 GMT"
content-type: application/json; charset=UTF-8
content-length: 4183

{"took":5538,"errors":false,...}

Экспериментируя, я обнаружил, что проблема заключается в определении кодировки типа контента Content-Type: application/x-ndjson; charset=utf-8 и если я изменю это на Content-Type: application/x-ndjson Я не получаю предупреждения.

Это проблема эластичного поиска или я неправильно формирую запрос?

1 ответ

Официальная документация прямо заявляет, что

При отправке запросов в эту конечную точку заголовок Content-Type должен быть установлен на application/x-ndjson.

RestController Исходный код также показывает, что они игнорируют кодировку:

final String lowercaseMediaType = restRequest.header("Content-Type").toLowerCase(Locale.ROOT);
// we also support newline delimited JSON: http://specs.okfnlabs.org/ndjson/
if (lowercaseMediaType.equals("application/x-ndjson")) {
    restRequest.setXContentType(XContentType.JSON);
    return true;
}
Другие вопросы по тегам