我正在使用一个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网内部活动页面失败的截图:
任何帮助,将不胜感激。谢谢。