0

Я работаю на ионном. и получил эту ошибку. Вот мой app.js:XMLHttpRequest не может загрузить «URL». Ответ на предполетный период имеет неверный код состояния HTTP 401

var app = angular.module('eMoMo', ['ionic', 'ngCordova']) 
.config(['$httpProvider', function ($httpProvider) { 
     //Reset headers to avoid OPTIONS request (aka preflight) 
     $httpProvider.defaults.headers.common = {}; 
     $httpProvider.defaults.headers.post = {}; 
     $httpProvider.defaults.headers.get = {}; 
     $httpProvider.defaults.headers.delete = {}; 
     $httpProvider.defaults.headers.put = {}; 
     $httpProvider.defaults.headers.patch = {}; 
     $httpProvider.defaults.headers.common['Access-Control-Allow-Headers'] = '*';          
     //$httpProvider.defaults.headers.common['Authorization'] = 'Basic ' + btoa(my_id+ ':' + my_pass") 
    }]); 

app.controller('MainViewController', function($scope, $http) { 
    $http({ 
    method:"GET", 
    url: "my_url" 
     headers: { 
     'content-type': 'application/x-www-form-urlencoded; charset=utf-8', 
     'authorization': 'Basic ' + btoa('my_username' + ':' + 'my_pass') 
     'access-control-allow-origin': '*' 
    } 
    }).then(function(categories){ 
    console.log(categories); 
    }); 

}); 

app.run(function($ionicPlatform) { 
    $ionicPlatform.ready(function() { 
    if(window.cordova && window.cordova.plugins.Keyboard) { 
     cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true); 
     cordova.plugins.Keyboard.disableScroll(true); 
    } 
    if(window.StatusBar) { 
     StatusBar.styleDefault(); 
    } 
    }); 
} 

)

Я пытаюсь исследование, это рассказать о CORS, но у меня есть установить плагин хрому, чтобы отключить эту ошибку. Как я могу решить эту проблему. ?

+0

какая версия хром вы используете? Я полагаю, это может быть 37 или 38? – varit05

+0

@ varit05 - Почему вы думаете, что OP использует такую ​​древнюю версию Chrome? – Quentin

+0

Если я не ошибаюсь, '401' Unathorized, возможно, вызов OPTIONS обрабатывается, но поскольку он не имеет заголовка авторизации, он отклоняется, вы должны обрабатывать' OPTIONS', чтобы возвращать '200 OK' – maurycy

ответ

0

Поскольку вы добавляете пользовательские заголовки, вы вызываете preflight request. Предположительно, ваш плагин просто вставляет Access-Control-Allow-Origin: * в любой ответ, прежде чем Chrome обработает его. Это не помогает, когда сервер отвечает на запрос OPTIONS с ошибкой.

У вас есть четыре варианта:

  1. Убедитесь, что сервер находится на том же происхождения, так что вам не нужно CORS (это может предусматривать создание сервера развития, который лучше отражает вашу живую окружающую среду)
  2. Получить сервер для поддержки CORS
  3. Найти плагин, который может обрабатывать запросы предполетных (или исправить уже существующий, так что может)
  4. Изменить код, чтобы он не генерирует предполетный запрос

Отправной точкой для варианта 4 будет удалить:

$httpProvider.defaults.headers.common['Access-Control-Allow-Headers'] = '*';          

и

'access-control-allow-origin': '*' 

... так как Access-Control-Allow-Origin и Access-Control-Allow-Заголовки ответ и не имеют никакого смысла по запросу.

Возможно, вы все еще можете столкнуться с проблемами при добавлении заголовка авторизации.

-1

обычно 401 относится к несанкционированному запросу.

  1. Pls подтвердить свой пароль и имя пользователя,
  2. если оба правильны, то сервер оленьей кожи destiantion принимает btoa кодировки Вашего имени пользователя и passwoord. Попробуйте кодировку BaseConverter64
+0

Не имеет значения, какие учетные данные , они не будут включены в запрос опций OPTIONS, который браузер делает, чтобы выяснить, имеет ли он разрешение на выполнение запроса с учетными данными. – Quentin

+0

@Quentin: проверка 'preflight OPTIONS' является одним из подходов к рассмотрению проблемы. Но ошибка speciafically говорит 401. Более того, если это было связано с 'CORS' или' preflight OPTIONS', ошибка была бы другой. имеет смысл??? – mattymanme

+0

№ Ошибка не была бы другой. Ошибка явно говорит: «Ответ на предполетный период имеет неверный код статуса HTTP 401». Он не сказал бы, что если бы речь шла не о ответе на запрос OPF перед полетом. – Quentin

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

  • Нет связанных вопросов^_^