2017-04-03 71 views
1

我想用ajax象下面這樣從我的計算機訪問另一臺服務器的NIFI REST API,無法訪問另一臺服務器的NIFI REST API在安全模式下

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

獲得迴應預檢要求沒有按」 t通過訪問控制 檢查:否 請求的資源錯誤中存在「Access-Control-Allow-Origin」標頭。

回答

1

阿帕奇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

相關問題