javascript - 在 WEBHDFS REST Api 中启用跨域访问以供 JavaScript 使用?

标签 javascript angularjs rest hadoop webhdfs

我正在尝试从 Webhdfs rest api 获取 liststatus,但出现以下错误。

XMLHttpRequest cannot load http://<IP>:50070/webhdfs/v1/?op=LISTSTATUS. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access.

当我尝试通过 curl 访问时它加载成功。但是当我尝试使用 AngularJS $http.get 获取它时失败了。

有没有办法在Hadoop core-site.xml 或其他地方启用跨域访问?

最佳答案

如果我没理解错的话,您正在对与您的页面所在的域不同的域执行 XMLHttpRequest。因此,浏览器会阻止它,因为出于安全原因,它通常允许同一来源的请求。当你想做一个跨域请求时,你需要做一些不同的事情。有关如何实现这一目标的教程是使用 CORS。

当您使用 postman 时,他们不受此政策的限制。引用自跨源 XMLHttpRequest:

在 Firefox 浏览器中检查它可能有效,否则 ..

我相信这可能是因为 Chrome 不支持本地主机通过 Access-Control-Allow-Origin -- 请参阅 Chrome 问题

要让 Chrome 在 header 中发送 Access-Control-Allow-Origin,只需将/etc/hosts 文件中的本地主机别名为其他域,例如:

127.0.0.1 localhost yourdomain.com 然后,如果您使用 yourdomain.com 而不是 localhost 访问您的脚本,调用应该会成功。 (要么) 那是服务器的问题。您必须在服务器端设置响应 header 。

关于javascript - 在 WEBHDFS REST Api 中启用跨域访问以供 JavaScript 使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37068759/

相关文章:

javascript - 调整此 javascript 以与 li 和 tr 一起使用

c# - Mootools 幻灯片

javascript - 错误 : [ng:areq] Argument 'addCtrl' is not a function, 未定义

ng-repeat 中的 AngularJS ng-form

java - 如何将 Swagger 与 Maven + Java + Jersey +Tomcat 集成

javascript - Axios 循环 promise

java - 使用 javascript 动态添加行时,我增加索引值,但出现错误

javascript - Angular 翻译问题

rest - 在 REST 中定义生成端点的正确方法是什么?

mysql - 在 url 中使用 slug 时如何提高性能?