2017-06-02 92 views
1

我正在使用一个Angular 1.6.3应用程序,该应用程序使用elasticsearch.js库来查询在远程服务器上运行的ElasticSearch 5.4实例。最近,我们的应用程序开始出现问题,当它最初涉及ElasticSearch数据时,会收到几个Response for preflight is invalid (redirect)错误。目前这个问题只发生在Chrome:针对预检的响应对AngularJS和ElasticSearch无效(重定向)

Response for preflight is invalid (redirect)

在开发工具的要求截图:HTTP request in network tab

这个错误似乎是随机发生的,并且当用户访问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网内部活动页面失败的截图: enter image description here

任何帮助,将不胜感激。谢谢。

回答

1

问题的原因可以在OPTION请求底部附近的Chrome DevTool网络内部事件页面中看到,它显示CHROME_EXTENSION_REDIRECTED_REQUEST。 Chrome扩展程序随机将我的请求重定向到ElasticSearch,从而有效地取消了它们。由于它是由我的公司(通过企业策略)安装的Chrome扩展程序,因此无法移除,因此我可以将ElasticSearch主机添加到扩展程序的白名单中。

相关问题