2016-07-27 7 views
5

это может показаться известной проблемой, и на эту тему существует много вопросов, однако моя ситуация очень странная. У меня есть простое веб-приложение, которое развернуто на tomcat 8.0.36. Я настроил CORS правильно: запросыЗапросы на перекрестный поиск заблокированы в tomcat 8

<filter> 
<filter-name>CorsFilter</filter-name> 
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class> 
</filter> 
<filter-mapping> 
<filter-name>CorsFilter</filter-name> 
<url-pattern>/*</url-pattern> 
</filter-mapping> 

Поперечное происхождения блокируются браузером:

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

В файле журнала tomcat я также вижу код ответа 403. Интересно, что код моего приложения никогда не выполняется в случае запросов с кросс-началом. Запросы блокируются до моего приложения, и 403 отправляется немедленно. У меня нет apache перед tomcat, это простой кот. Я пробовал много вещей, включая whitelisting истоков и указание разрешенных заголовков - ничего не помогло. Я также попытался установить заголовок программным образом, пока не обнаружил, что код в случае запроса перекрестного происхождения никогда не выполняется.

UPD: Конечная точка принимает запросы POST. Те запросы POST отправляются как XmlHttpRequests из фрагмента JS.

Любые идеи, что это может быть?

p.s Я могу сделать успешные запросы с самого начала.

+0

Привет, Вы используете настройки по умолчанию в конфигурации 'CorsFilter', , так что проблема может быть со всем. Например, Значение 'cors.allowed.methods' по умолчанию -' GET, POST, HEAD, OPTIONS' и, возможно, в запросе 'DELETE' пытается. Не могли бы вы разместить более подробную информацию? – snieguu

+0

Я обновил вопрос. Я отправляю запросы POST. – bekon

+0

Запрос отклоняется 'org.apache.catalina.filters.CorsFilter'. Попробуйте отладить его или установите логгер для отладки уровня в этом классе. – snieguu

ответ

0

Я понял, в чем проблема: мне нужно было установить заголовок Content-Type в запросе, иначе запрос будет заблокирован. - Tomcat CORS filter

1

На самом деле вам необходимо установить и Access-Control-Allow-Origin, и Access-Control-Allow-Methods. Вот пример:

Access-Control-Allow-Origin: http://www.myhost.com 
Access-Control-Allow-Methods: GET, POST, PUT, DELETE 

Также вы должны принять «OPTIONS» метод возвращения обоих Access-Control-Allow-* строки заголовка. Некоторые браузеры могут выдавать такой запрос перед вашим фактическим запросом (например, запрос «PUT»), чтобы получить информацию о доступе к службе.

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

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