AngularJS выдает ошибку 403 при отправке данных POST

0

My Angular app делает запросы к API, который открыт для других доменов.

При выполнении запроса POST без поля data запрос будет успешно завершен. Таким образом, $http.post(url).then(); работает. Однако $http.post(url, data).then() or $http.post(url, null).then(); не. Запрос также завершается с использованием jQuery и Postman (клиент REST, который я использую).

Выдаваемая ошибка: ответ на запрос предполетной проверки не проходит проверку контроля доступа. Нет заголовка "Access-Control-Allow-Origin" на запрошенном ресурсе. Происхождение ' http://localhost ', следовательно, не допускается. В ответе был код статуса HTTP 403.

Настройка пользовательских заголовков (например, большинство ответов на SO) не увенчалась успехом. Передача объекта конфигурации с {headers: {}} ИЛИ $httpProvider.defaults показывает изменений в заголовках в инспекторе Chrome.

Проблема сохраняется после включения плагина CORS, что означает, что это не имеет никакого отношения к API.

Что мне не хватает?

  • 0
    Запрос от Angular, вероятно, имеет заголовок, который не включен в белый список в манифесте CORS. Попробуйте добавить заголовки из запроса Angular один за другим в Postman и найдите тот, который плох.

3 ответа

0

Возможно, может быть ошибка с конфигурацией корса.

Если ваша проблема связана с сервером tomcat, вы должны настроить фильтр в файле web.xml со следующим кодом:

<filter>
    <filter-name>CorsFilter</filter-name>
    <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
    <init-param>
        <param-name>cors.allowed.headers</param-name>
        <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,Authorization</param-value>
    </init-param> 
    <init-param> 
        <param-name>cors.allowed.origins</param-name> 
        <param-value>*</param-value> 
    </init-param> 
    <init-param> 
        <param-name>cors.allowed.methods</param-name> 
        <param-value>GET,POST,HEAD,OPTIONS,PUT,DELETE</param-value> 
    </init-param> 
</filter>

<filter-mapping>
    <filter-name>CorsFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

Надеюсь, вам поможет!

0

Просто понял..

1) Установлен ли CORS в качестве шаблона (или "зеркало" с модулем CORS -)? Я ДУМАЮ, что запрос OPTIONS требует определенной ссылки на домен. Я должен был изменить заголовок CORS, чтобы быть разрешенным доступом-control-origin> mydomain.com & NOT *

2) Кроме того, вы без головы? Ive нашел использование restws - я должен фактически зарегистрироваться на моем сайте drupalk, а затем выполнить запрос api на сеанс/токен, чтобы получить токен, передав мои учетные данные. Если вы не подписались вначале, я получаю отказ 403.

0

У меня была аналогичная проблема с моим угловым приложением с помощью restws/Drupal.

Откройте свою сетевую консоль и проверьте заголовки.. должен найти, что ваш запрос был заменен "предполетным" запросом OPTIONS. В современных браузерах сейчас, при перекрестном запросе, запрос OPTIONS будет запущен первым, перед PUT. https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Overview

Я предполагаю, что API не настроен на прием запроса параметров.

Я должен был поменять restws с небольшим взломом, чтобы распознать объект OPTIONS и вернуться обратно, чтобы принять PUT

  • 0
    прошу прощения, не ставьте .. сообщение
  • 0
    Спасибо за ответы. Извините, но у меня нет доступа к API, поэтому я не могу комментировать это. Рад, что у тебя есть работа, ура.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню