我有一个 Angular 6 应用程序,它将 http 请求发送到 elasticsearch DB。
Angular 应用程序、Nodejs 服务器(为 Angular 应用程序提供服务)和 Elasticsearch 托管在同一台计算机上,而浏览器位于不同的计算机上。客户端使用浏览器指向nodejs IP地址。
请求是通过 httpClient 从 Angular 发送的(不使用任何 NodeJS 或 ExpressJS 软件),并且不允许使用第三方软件包(Chrome 和 Firefox)进行 CORS 请求,或者通过更改浏览器设置(IE 11),浏览器不会不允许请求发出,并给出 CORS 错误。
我希望无需任何调整即可正常工作,因此我将以下配置添加到elasticsearch.yml:
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"
为了以防万一,我将以下行添加到我的 Nodejs 服务器:
app.use('*', function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type');
next();
});
请求是通过 Angular 应用程序中的服务发送的,而且很简单:
getIndecies(){
return this.http.get(`${this.full_elastic_url}/_cat/indices?format=json`)
}
当我不使用 chrome/firefox/IE11 启用 CORS 时,发送请求时我会收到此消息:
我不明白我做错了什么。为了解决这个问题,我在在线答案推荐的每个地方启用了 CORS,但浏览器仍然阻止了我的请求。
为什么我无法绕过此错误?
应用程序(例如 kibana)如何能够毫无问题地执行此操作,但我的 Angular 应用程序却不能?
这里有人能为我提供神奇的解决方案吗?
谢谢!
最佳答案
某些网络、浏览器默认也会阻止 cors,根据我的经验,解决此问题的最佳方法是通过 Node 服务器代理您的请求。
关于node.js - 从 Angular 6 应用程序向 Elasticsearch 发送 get 请求时出现 CORS 错误,即使允许,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52608762/