从角度6应用程序向弹性搜索发送获取请求时发生CORS错误,即使允许

时间:2018-10-02 12:53:55

标签: node.js angular elasticsearch cors

我有一个有角度的6应用程序,它将http请求发送到elasticsearch DB。

Angular应用程序,nodejs服务器(为Angular应用程序提供服务)和elasticsearch托管在同一台计算机上,而浏览器在另一台计算机上。客户端使用浏览器指向nodejs IP地址。

请求是通过httpClient从angular发送的(不使用任何nodejs或expressjs软件),并且不允许第三方包(Chrome和Firefox)或通过更改浏览器设置(IE 11)使用CORS请求,浏览器不会不允许请求发出,并给我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时,发送请求时会收到以下消息:

Firefox: enter image description here

Chrome: enter image description here

IE: enter image description here

我不明白我在做什么错。我会在建议在线回答的每个地方启用CORS,以解决此问题,但仍然-浏览器阻止了我的要求。

为什么我不能绕过此错误?

kibana之类的应用程序如何做到这一点没有问题,但我的角度应用程序却无法做到?

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

谢谢!

1 个答案:

答案 0 :(得分:0)

在某些网络中,浏览器默认情况下也会阻止cors,根据我的经验,最好的方法是通过节点服务器代理您的请求。