2016-04-12 3 views
2

Я использую метод jQuery ajax, чтобы сделать запрос POST к моему API Elix's _search.Использование ElasticSearch из браузера не выполняется при запросе OPTIONS

При передаче параметров в запросе, все хорошо:

$.ajax({ 
    url: '//localhost:9200/my_index/_search/?q=hello', 
    method: 'POST' 
}).then(function(body){ 
    console.log(body); 
}); 

При передаче параметров в теле (JSON), проблемы начинаются:

$.ajax({ 
    url: '//localhost:9200/my_index/_search/', 
    method: 'POST', 
    dataType: 'json', 
    contentType: "application/json", 
    data: this.params 
}).then(function(body){ 
    console.log(body); 
}); 

Вместо того, чтобы послать POST запрос, браузер (Chrome) отправляет запрос OPTIONS.

документация Чтение Jquery, я вижу:

Для кросс-доменных запросов, устанавливая тип содержимого, отличное применение/х-WWW-форм-urlencoded, многочастному/форм-данных или текст/обычный приведет к тому, что браузер отправит на сервер запрос опций OPTIONS на сервер.

Так что, вероятно, откуда оно взялось.

Проблема в том, что после предпродажного запроса ничего не происходит.

Глядя на сам запрос в Wireshark:

OPTIONS /my_index/_search/ HTTP/1.1 
Host: localhost:9200 
Connection: keep-alive 
Cache-Control: max-age=0 
Access-Control-Request-Method: POST 
Origin: http://localhost:4000 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36 
Access-Control-Request-Headers: accept, content-type 
Accept: */* 
Referer: http://localhost:4000/search/?q=hello 
Accept-Encoding: gzip, deflate, sdch 
Accept-Language: en-US,en;q=0.8,fr;q=0.6 

HTTP/1.1 200 OK 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: 
Access-Control-Max-Age: 1728000 
date: Tue, 12 Apr 2016 07:30:50 GMT 
content-length: 0 

Я заметил, что Access-Control-Allow-Methods поле ОТКЛИКА является пустым, так что я имею в виду, это может быть связано.

Мой elasticsearch.yml файл содержит:

http.cors.enabled: true 
http.cors.allow-origin: "*" 

Я добавил:

http.cors.allow-methods : OPTIONS, HEAD, GET, POST, PUT, DELETE 

Но это ничего не меняет.

+0

Какую версию ES у вас есть? См. Это: https://github.com/elastic/elasticsearch/issues/17483 – Val

+0

'version [2.3.1]' какая версия была исправлена? –

+0

Будет исправлено в [2.3.2] (https://github.com/elastic/elasticsearch/pull/17524) – Val

ответ

3

Это вызвано this issue, который был зафиксирован и будет выпущен в 2.3.2

+0

И ES 2.3.2 отсутствует сегодня: https://www.elastic.co/blog/elasticsearch-2-3-2-released – Val

Смежные вопросы