我正在使用一個Angular 1.6.3應用程序,該應用程序使用elasticsearch.js庫來查詢在遠程服務器上運行的ElasticSearch 5.4實例。最近,我們的應用程序開始出現問題,當它最初涉及ElasticSearch數據時,會收到幾個Response for preflight is invalid (redirect)
錯誤。目前這個問題只發生在Chrome:針對預檢的響應對AngularJS和ElasticSearch無效(重定向)
這個錯誤似乎是隨機發生的,並且當用戶訪問Chrome瀏覽器的應用程序不會發生隱身模式或Firefox等其他瀏覽器。
經過一番研究,我發現這個OPTIONS
請求是瀏覽器發出的問題,請求服務器發送包含我想要查詢ElasticSearch的實際POST
是否合適。預檢正在發生的原因是因爲我正在嘗試使用application/json
作爲Content-Type
標題進行POST,該標題不是Content-Type
標題的「標準」值之一。
我的問題是 - 我該如何解決?我在elasticsearch.yml
改變了CORS設置無濟於事:
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-methods: OPTIONS, HEAD, GET, POST, PUT, DELETE
http.cors.allow-headers: "X-Requested-With, X-Auth-Token, Content-Type, Content-Length, Authorization"
我也試圖改變elasticsearch.js Content-Type
標題爲每個ElasticSearch請求,但每個請求繼續發送application/json
,如設置不聽我進入:
var client = elasticsearch.Client({
hosts: [{
host: 'es-proxy.company.net',
port: 80,
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
}]
});
的OPTION
請求從Chrome中DevTool網內部活動頁面失敗的截圖:
任何幫助,將不勝感激。謝謝。