2016-03-16 63 views
0

我在使用角度$ http.get請求和頭參數時遇到了問題。我試圖複製這個捲曲

curl -X GET --header "Accept: application/json" --header "authenticationkey: somerandomtoken" "http://external.domain.com/admin/" 

哪給了我想要的迴應。

在角:

XMLHttpRequest cannot load http://external.domain.com/admin/. Request header field authenticationkey is not allowed by Access-Control-Allow-Headers in preflight response. 

這是推動我瘋狂:

var urlBase = "//external.domain.com/admin/"; 
var config = { 
    headers:{ 
     'Accept'   : 'application/json', 
     'authenticationkey': 'somerandomtoken' 
    } 
}; 
dataFactory.getToken = function() { 
    return $http.get(urlBase,config); 
}; 

我收到此錯誤信息。也試過這個,AngularJS $http custom header for all requests它給了我同樣的錯誤。有任何想法嗎?

+3

遠程服務器上CORS設置的簡單問題,不允許標題。除非您控制其他域,否則您無能爲力。在您自己的服務器上使用代理服務器 – charlietfl

+3

服務器端API需要能夠接受飛行前請求('OPTIONS'),並具有與普通請求相同的標頭。 'curl'不會導致這個問題,因爲它不受JavaScript的限制*相同的源策略* – Phil

+0

謝謝@charlietfl 我不控制域,我必須通知後端管理員。 – henrik123

回答

0

這是一個CORS問題。如果應用程序服務器和API域不相同,則會發生這種情況。

解決方案,這可能 -

  1. 讓你的API服務器上跨原始域請求。但是這將導致允許所有人訪問您的API。所以想到這一點。您也可以限制服務器端的特定域。
  2. 如果您只是爲了開發目的而需要它,並且您的最終包將在同一個域上發佈,那麼只需在Chrome https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?hl=en中使用此插件即可訪問此類資源以實現臨時目的。
  3. 第三種選擇是在您的域API服務器上託管那些API JS庫,類似​​於Facebook和Google API。 API JS將作爲雙方之間的橋樑。