2016-03-16 2 views
0

У меня возникают проблемы с угловым запросом и заголовком $ http.get. Im пытается воспроизвести этот cURL

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

Который дает мне ответ, который я хочу.

В угловой:

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

И я получаю сообщение об ошибке:

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

Это сводит меня с ума. Также попробовал это, AngularJS $http custom header for all requests, и он дает мне ту же ошибку. Есть идеи?

+3

Простая проблема с настройками CORS на удаленном сервере, не допускающая заголовок. Вы ничего не можете с этим поделать, если не контролируете другой домен. Использовать прокси-сервер на своем собственном сервере – charlietfl

+3

API-интерфейс на стороне сервера должен иметь возможность принимать предполетные запросы («ОПЦИИ») со всеми теми же заголовками, что и обычный запрос. Вы не получаете эту проблему с '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-интерфейсов JS на сервере API ваших доменов, подобных Facebook и API Google. API JS будет работать как мост между обеими сторонами.