node.js - 从 Angular 6 应用程序向 Elasticsearch 发送 get 请求时出现 CORS 错误,即使允许

标签 node.js angular elasticsearch cors

我有一个 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 时,发送请求时我会收到此消息:

火狐: enter image description here

Chrome 物: enter image description here

IE: enter image description here

我不明白我做错了什么。为了解决这个问题,我在在线答案推荐的每个地方启用了 CORS,但浏览器仍然阻止了我的请求。

为什么我无法绕过此错误?

应用程序(例如 kibana)如何能够毫无问题地执行此操作,但我的 Angular 应用程序却不能?

这里有人能为我提供神奇的解决方案吗?

谢谢!

最佳答案

某些网络、浏览器默认也会阻止 cors,根据我的经验,解决此问题的最佳方法是通过 Node 服务器代理您的请求。

关于node.js - 从 Angular 6 应用程序向 Elasticsearch 发送 get 请求时出现 CORS 错误,即使允许,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52608762/

相关文章:

mysql - 无法与 LoopBack 建立 MySql 连接

node.js - socket.io + 使用 'emit' 回调?

Angular/Rxjs 条件嵌套 Observables

javascript - Angular 6如何在表单中制作所有输入的不可编辑元素

elasticsearch - 如何避免 Elasticsearch 中重复的无痛脚本

javascript - 如何反转这个命令?

c# - 用 Angular 2 应用程序替换现有的 MVC 项目

c# - 将 ElasticSearch 服务器上的映射与从 C# 类推断的映射进行比较?

python-2.7 - Elasticsearch 5.4-按术语过滤是否存在术语,不存在则不过滤

jquery - bower 错误 : Failed UNABLE_TO_VERIFY_LEAF_SIGNATURE