Я использую метод 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
Но это ничего не меняет.
Какую версию ES у вас есть? См. Это: https://github.com/elastic/elasticsearch/issues/17483 – Val
'version [2.3.1]' какая версия была исправлена? –
Будет исправлено в [2.3.2] (https://github.com/elastic/elasticsearch/pull/17524) – Val