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.
Что мне не хватает?
Возможно, может быть ошибка с конфигурацией корса.
Если ваша проблема связана с сервером 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>
Надеюсь, вам поможет!
Просто понял..
1) Установлен ли CORS в качестве шаблона (или "зеркало" с модулем CORS -)? Я ДУМАЮ, что запрос OPTIONS требует определенной ссылки на домен. Я должен был изменить заголовок CORS, чтобы быть разрешенным доступом-control-origin> mydomain.com & NOT *
2) Кроме того, вы без головы? Ive нашел использование restws - я должен фактически зарегистрироваться на моем сайте drupalk, а затем выполнить запрос api на сеанс/токен, чтобы получить токен, передав мои учетные данные. Если вы не подписались вначале, я получаю отказ 403.
У меня была аналогичная проблема с моим угловым приложением с помощью restws/Drupal.
Откройте свою сетевую консоль и проверьте заголовки.. должен найти, что ваш запрос был заменен "предполетным" запросом OPTIONS. В современных браузерах сейчас, при перекрестном запросе, запрос OPTIONS будет запущен первым, перед PUT. https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Overview
Я предполагаю, что API не настроен на прием запроса параметров.
Я должен был поменять restws с небольшим взломом, чтобы распознать объект OPTIONS и вернуться обратно, чтобы принять PUT