AngularJs получают запрос с авторизацией - PullRequest
0 голосов
/ 16 декабря 2018

Я пытаюсь выполнить запрос на получение, который требует аутентификации, но он не выдает запрос GET, как я вижу на вкладке сети в chrome, что он выдает запрос OPTIONS и, следовательно, получает ошибку 404?

      $http.defaults.headers.common['Authorization'] = 'Basic ' + _this.auth_token;

      $http.get('http://localhost:2337/getFeedbackForm/abcd?format=json')
       .success(function (data, status, headers) {

           blockUI.stop();

           $scope.feedbackForm = data;

       })
       .error(function (data, status, header, config) {

           blockUI.stop();

           $scope.feedbackForm = data;

       });

Почему он обрабатывает запрос GET как PUT или POST?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Проблема в CORS на стороне сервера.

Подробнее о CORS: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

Ваш сервер должен принять HTTP-запрос типа «OPTION» на всех конечных точках+ добавить заголовок к своим ответам

Access-Control-Allow-Origin

Подробнее о заголовке: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin

0 голосов
/ 17 декабря 2018

Ваш запрос API выглядит так, как будто он построен правильно, поэтому ваш Angular-код не является проблемой.

Если вы видите, что запрос OPTIONS выходит, но не запрос GET, это означает, что запрос OPTIONS не выполнен, поэтомубраузер не отправил запрос GET.Документы MDN по предварительно выданным запросам объясняют это поведение:

В отличие от «простых запросов» (обсуждалось выше), «предварительно выданные» запросы сначала отправляют HTTP-запрос методом OPTIONS вресурс в другом домене, чтобы определить, безопасен ли фактический запрос для отправки.Межсайтовые запросы предварительно просматриваются следующим образом, поскольку они могут иметь последствия для пользовательских данных.

Если на вашем сервере не включена поддержка CORS для домена, на котором работает приложение Angular, это означает, что оно не принимаетзапросы, чтобы браузер не отправлял запрос GET.

Чтобы решить эту проблему, необходимо включить CORS в своем API, работающем по адресу localhost: 2337.Поскольку я не знаю, во что встроен ваш сервер, вот несколько вариантов:

Сначала можно попробовать изменить его, разрешив все запросы, а затемсужение его по домену или маршруту.

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

Access-Control-Allow-Origin: *

Дополнительная информация о MDN: HTTPЗаголовки Access-Control-Allow-Origin .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...