Пост-вызов CORS не работает в Angularjs

Я пытаюсь реализовать пост-вызов с перекрестным происхождением из приложения angularjs, тогда я получаю следующую ошибку.

Поле заголовка запроса Авторизация не разрешена Access-Control-Allow-Headers в предпечатном ответе.

Но когда я вызываю Ajax, он работает правильно. Как HTTP-вызов post работает в angularjs?

Вызов Ajax

$.ajax({ 
            type: 'POST', 
            url: getAccessTokenUrl, 
            data: JSON.stringify(clintdata), 
            dataType: 'json', 
            contentType: "application/json; charset=utf-8", 
            success: function(resultData) { 
                console.info(resultData);    
            }, 
            error: function (request, status, error) { 
               console.info(status);  
            } 
        });

HTTP-вызов Angularjs

$http({
          method: 'POST',
          url: getAccessTokenUrl,
          data: clientdata,
          headers: {
            'Authorization': undefined,
            'Auth-Token': undefined
          }
        }).then(function(res){
            console.info(res);
        }, function(err){
            console.info(err);
        });

У меня какая-то настройка по умолчанию. Авторизация для других REST

$http.defaults.headers.common['Content-Type'] = 'application/json;charset=utf-8;' ;
  $http.defaults.headers.common['Auth-Token'] = 'X-Requested-With';
  $http.defaults.headers.common['Authorization'] = $('#Authorization').val();

вы включили CORS на своем сервере? поставить больше информации о бэкэнде.

Nitishkumar Singh 28.05.2018 06:31

Да, вышеуказанный вызов ajax работает правильно.

Aloke Kantal 28.05.2018 06:32

Какую версию AngularJS вы используете?

Phil 28.05.2018 08:04

Спасибо @Phil. Теперь его работа.

Aloke Kantal 28.05.2018 08:19

Я не понимаю. Что изменилось между это не работает и сейчас?

Phil 28.05.2018 08:20

Я динамически добавляю заголовок авторизации. Ранее заголовок авторизации применялся для всех HTTP-вызовов. потому что он находится в режиме выполнения.

Aloke Kantal 28.05.2018 08:22
Знаете ли вы, что директивы являются одной из самых мощных и универсальных функций Angular?
Знаете ли вы, что директивы являются одной из самых мощных и универсальных функций Angular?
Директивы позволяют расширять HTML новыми элементами и атрибутами и даже создавать собственные структурные директивы для манипулирования DOM. С...
Разница между Angular и React
Разница между Angular и React
React и AngularJS - это два самых популярных фреймворка для веб-разработки. Оба фреймворка имеют свои уникальные особенности и преимущества, которые...
0
6
590
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Заголовки Access-Control-* - заголовки ответа. Они приходят с сервера в ответ на запрос. Вы не применяете их к заголовкам запросов.

Если ваш запрос jQuery работает правильно без добавления каких-либо дополнительных заголовков, ваш запрос AngularJS должен работать так же.

Эквивалентный запрос jQuery в AngularJS (включая удаление заголовков Авторизация и Auth-Token, которые вы установили по умолчанию):

$http.post(getAccessTokenUrl, clientdata, {
  headers: {
    Authorization: undefined,
    'Auth-Token': undefined
  }
}).then(response => {
  console.info(response.data)
})

или длинная версия

$http({
  method: 'POST',
  url: getAccessTokenUrl,
  data: clientdata,
  headers: {
    Authorization: undefined,
    'Auth-Token': undefined
  }
}).then(...)

AngularJS по умолчанию ...

  • POSTS запросы как тип содержимого application/json
  • Сериализует свойство данные в JSON
  • Ожидает ответа JSON
  • Разрешает обещание $http с объектом response с телом ответа, проанализированным как JSON в свойстве data

У меня следующая ошибка. «Поле заголовка запроса Access-Control-Allow-Origin не разрешено Access-Control-Allow-Headers в предпечатном ответе».

Aloke Kantal 28.05.2018 07:26

У меня есть некоторые настройки http по умолчанию в методе запуска. $ http.defaults.headers.common ['Content-Type'] = 'application / json; charset = utf-8;' ; $ http.defaults.headers.common ['Access-Control-Allow-Origin'] = '*'; $ http.defaults.headers.common ['Auth-Token'] = 'X-Requested-With'; $ http.defaults.headers.common ['Авторизация'] = $ ('# Авторизация'). val ();

Aloke Kantal 28.05.2018 07:29

@AlokeKantal Повторюсь, Access-Control-Allow-Origin - это не заголовок запроса. Не добавляйте его в $http.defaults.headers.common или где-либо еще в вашем JS-коде.

Phil 28.05.2018 07:30

Если я удалю настройку формы "Access-Control-Allow-Origin" по умолчанию, она будет работать?

Aloke Kantal 28.05.2018 07:30

Я бы не сказал с полной уверенностью, что это будет Работа, но у вас точно не должно быть этого в заголовках запросов.

Phil 28.05.2018 07:32

После удаления «Access-Control-Allow-Origin» я получил следующую ошибку. Поле заголовка запроса Авторизация не разрешена Access-Control-Allow-Headers в предпечатном ответе.

Aloke Kantal 28.05.2018 07:33

@AlokeKantal, зачем вы добавляете заголовок Authorization? В вашем запросе jQuery его нет, и конечная точка сервера не позволяет это

Phil 28.05.2018 07:35

Я добавляю это для других REST

Aloke Kantal 28.05.2018 07:35

@AlokeKantal, тогда вам нужно исключить его из этого запроса

Phil 28.05.2018 07:36

Я не могу правильно понять ваш последний комментарий.

Aloke Kantal 28.05.2018 07:37

Даже после применения вашего ответа я получаю ту же ошибку «Авторизация поля заголовка запроса не разрешена Access-Control-Allow-Headers в предполетном ответе».

Aloke Kantal 28.05.2018 07:43
Ответ принят как подходящий

Удалите следующую настройку

 $http.defaults.headers.common['Auth-Token'] = 'X-Requested-With';
$http.defaults.headers.common['Authorization'] = $('#Authorization').val();

Добавить заголовок авторизации динамически из перехватчика

request: function(config) {
if (angular.isUndefined(config.skipInterceptor) || !config.skipInterceptor) {
// add Authorization token
}
return config;
}

HTTP-вызов, подобный этому

$http.post('your url', {
skipInterceptor: true
})

Другие вопросы по теме