我有一个有角度的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时,发送请求时会收到以下消息:
我不明白我在做什么错。我会在建议在线回答的每个地方启用CORS,以解决此问题,但仍然-浏览器阻止了我的要求。
为什么我不能绕过此错误?
kibana之类的应用程序如何做到这一点没有问题,但我的角度应用程序却无法做到?
这里有人能为我提供神奇的解决方案吗?
谢谢!
答案 0 :(得分:0)
在某些网络中,浏览器默认情况下也会阻止cors,根据我的经验,最好的方法是通过节点服务器代理您的请求。