2016-11-28 2 views
7

Response from serverДоступ заголовки ответа HTTP в пользовательском angularjs

Я пытаюсь получить доступ к заголовку «ошибка четкость», как вы можете увидеть в браузере сеть инспектора (ссылка выше), заголовок получает возвращаются. Кроме того, я добавил пользовательский заголовок в «Access-Control-Expose-Headers», чтобы разрешить междоменные запросы, поскольку это было предложено исправить по другим вопросам.

Ниже приведен запрос на сервер вместе с обратными вызовами успеха/ошибки.

this.signon = function (request, onComplete, onError) { 
    console.log("Calling server with 'login' request..."); 

    return $http.post("http://localhost:8080/markit-war/services/rest/UserService/login/", request) 
     .then(onComplete, onError); 
}; 

var onLookupComplete = function(response) { 
    if (response.data.username) 
    { 
     //If user is returned, redirect to the dashboard. 
     $location.path('/dashboard'); 
    } 

    $scope.username = response.data.username; 
}; 

var onError = function(response) { 
    $scope.error = "Ooops, something went wrong.."; 
    console.log('error-detail: ' + response.headers('error-detail')); 
}; 

При попытке доступа к заголовок ответа, как показано ниже:

console.log(response.headers()); 
    console.log('error-detail: ' + response.headers('error-detail')); 

This только выходы: тип контента: "приложения/JSON" ошибок деталь: нуль

ли есть причина, по которой заголовок ошибки не отображается на объект ответа?

+0

вы можете сделать response.headers(). ОШИБКИ подробно? – user2085143

+0

@ user2085143 Нет, конечно, это не юридический синтаксис? –

+0

Наверное, нет, но не уверен, что возвращает response.headers(). Вы взглянули на это http://stackoverflow.com/questions/220231/accessing-the-web-pages-http-headers-in-javascript – user2085143

ответ

8

Я думаю, что вы на правильном пути. Чтобы иметь доступ к пользовательским заголовкам, вашему серверу необходимо установить этот специальный заголовок Access-Control-Expose-Headers, в противном случае ваш браузер разрешит доступ только к 6 предопределенным значениям заголовков, указанным в Mozilla docs.

На скриншоте такого заголовка нет в ответе. Вы должны взглянуть на бэкэнд для этого заголовка cors, который также должен присутствовать в ответе.

5

Это вопрос CORS. Поскольку это запрос с кросс-началом, браузер скрывает большинство заголовков. Сервер должен включить заголовок Access-Control-Expose-Headers в свой ответ.

Заголовок ответа Access-Control-Expose-Headers1 указывает, какие заголовки могут быть представлены как часть ответа, указав их имена.

По умолчанию, только 6 простых заголовков ответа подвергаются:

  • Cache-Control
  • Content-Language
  • Content-Type
  • Истекает
  • Last-Modified
  • Pragma

Если вы хотите, чтобы клиенты имели доступ к другим заголовкам, вы должны их перечислить, используя заголовок Access-Control-Expose-Headers.

Для получения дополнительной информации см MDN HTTP Header -- Access-Control-Expose-Headers

Смежные вопросы