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

问题描述 投票:0回答:2

我尝试从 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 或其他地方启用跨域访问?

javascript angularjs rest hadoop webhdfs
2个回答
0
投票

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

当您使用邮递员时,他们不受此政策的限制。引用自跨域 XMLHttpRequest:

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

我相信这可能是 Chrome 不支持 localhost 通过 Access-Control-Allow-Origin -- 请参阅 Chrome 问题

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

127.0.0.1 本地主机 yourdomain.com 然后,如果您使用 yourdomain.com 而不是 localhost 访问脚本,则调用应该会成功。 (或者) 那就是服务器的问题了您必须在服务器端设置响应标头。


0
投票

您可以按照 Apache 文档中的概述在 core-site.xml 中设置适当的 CORS 标头。 https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/HttpAuthentication.html#CORS

供参考--

要启用跨域支持 (CORS),请设置以下内容 配置参数:

添加 org.apache.hadoop.security.HttpCrossOriginFilterInitializer 到 core-site.xml 中的 hadoop.http.filter.initializers。您还需要 在 core-site.xml 中设置以下属性 -

hadoop.http.cross-origin.enabled = true

hadoop.http.cross-origin.allowed-origins = *

hadoop.http.cross-origin.allowed-methods = GET,POST,HEAD,DELETE,OPTIONS

hadoop.http.cross-origin.allowed-headers = X-Requested-With,Content-Type,Accept,Origin

hadoop.http.cross-origin.max-age = 1800
© www.soinside.com 2019 - 2024. All rights reserved.