Я пытаюсь реализовать пост-вызов с перекрестным происхождением из приложения 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();
Да, вышеуказанный вызов ajax работает правильно.
Какую версию AngularJS вы используете?
Спасибо @Phil. Теперь его работа.
Я не понимаю. Что изменилось между это не работает и сейчас?
Я динамически добавляю заголовок авторизации. Ранее заголовок авторизации применялся для всех HTTP-вызовов. потому что он находится в режиме выполнения.


Заголовки 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 по умолчанию ...
application/json$http с объектом response с телом ответа, проанализированным как JSON в свойстве dataУ меня следующая ошибка. «Поле заголовка запроса Access-Control-Allow-Origin не разрешено Access-Control-Allow-Headers в предпечатном ответе».
У меня есть некоторые настройки 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 ();
@AlokeKantal Повторюсь, Access-Control-Allow-Origin - это не заголовок запроса. Не добавляйте его в $http.defaults.headers.common или где-либо еще в вашем JS-коде.
Если я удалю настройку формы "Access-Control-Allow-Origin" по умолчанию, она будет работать?
Я бы не сказал с полной уверенностью, что это будет Работа, но у вас точно не должно быть этого в заголовках запросов.
После удаления «Access-Control-Allow-Origin» я получил следующую ошибку. Поле заголовка запроса Авторизация не разрешена Access-Control-Allow-Headers в предпечатном ответе.
@AlokeKantal, зачем вы добавляете заголовок Authorization? В вашем запросе jQuery его нет, и конечная точка сервера не позволяет это
Я добавляю это для других REST
@AlokeKantal, тогда вам нужно исключить его из этого запроса
Я не могу правильно понять ваш последний комментарий.
Даже после применения вашего ответа я получаю ту же ошибку «Авторизация поля заголовка запроса не разрешена Access-Control-Allow-Headers в предполетном ответе».
Удалите следующую настройку
$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
})
вы включили CORS на своем сервере? поставить больше информации о бэкэнде.