无法访问另一台服务器的NIFI REST API在安全模式下

无法访问另一台服务器的NIFI REST API在安全模式下

问题描述:

我想用ajax象下面这样从我的计算机访问另一台服务器的NIFI REST API,无法访问另一台服务器的NIFI REST API在安全模式下

url:"https://serverip:port/nifi-api/", 
{Authorization : 'Bearer ' + 'access token here'} 

获得回应预检要求没有按” t通过访问控制 检查:否 请求的资源错误中存在“Access-Control-Allow-Origin”标头。

阿帕奇NiFi的API旨在通过各种客户端的调用,但在这种情况下,我认为你是遇到安全防范由CORS (Cross-Origin Resource Sharing)到位。

如果在服务器A上一段代码(您的非NiFi机)使得一个AJAX请求到不同的原点(您的NiFi实例),和HTTP方法没有GET(和其他一些很小的限制),服务器A将首先向远程实例发送“预检”请求,即HTTP OPTIONS,以确定哪些请求有效。服务器可以通过标头Access-Control-Allow-Origin: *回复此问题,这是一个通配符值,表示它接受来自任何来源的请求。但是,如果要将凭证与请求一起发送,则必须在响应中明确列出原始主机名(Access-Control-Allow-Origin: https://serverA.com)。

因为NiFi使用嵌入式Jetty服务器来托管API,您可能需要显式地添加CrossOriginFilterdescribed here

+0

嗨安迪, 试图添加过滤器在http://stackoverflow.com/questions/16037558/how-to-add-access-control-allow-origin-to-jetty-server/16043524#16043524 提到但仍然收到相同的错误 **对预检请求的响应未通过访问控制检查:请求的资源上没有“Access-Control-Allow-Origin”标头。 Origin'https:// serverA:// port'因此不被允许访问。** – kayal

+0

如果您使用Developer Tools或curl发出AJAX请求,您是否可以看到响应并检查响应头?看起来过滤器没有在响应中放置正确的标题。 (也“serverA://端口”似乎不正确...)。 – Andy

+1

嗨安迪,解决问题的方法是在现有过滤器部分之前添加过滤器**。 参考:http://marianoguerra.org/posts/enable-cors-in-apache-solr.html – kayal