Включить CORS Apache Tomcat 7.0.52

Я пытался включить CORS на моем сервере Microsoft Azure Apache Tomcat, и я испробовал довольно много методов, но я все еще не могу запустить и запустить CORS. Я добавил это в файл web.xml, и мне не удалось его включить.

<filter>
  <filter-name>CorsFilter</filter-name>
  <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
  <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</param-value>
  </init-param>
  <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</param-value>
  </init-param>
  <init-param>
    <param-name>cors.exposed.headers</param-name>
    <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
  </init-param>
  <init-param>
    <param-name>cors.support.credentials</param-name>
    <param-value>true</param-value>
  </init-param>
  <init-param>
    <param-name>cors.preflight.maxage</param-name>
    <param-value>10</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>CorsFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

Я продолжаю получать сообщение об ошибке:

XMLHttpRequest не может загрузить url&output=json. В запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin». Таким образом, доступ к источнику 'http://url.net' запрещен.

Любые предложения о том, как я могу добиться этого быстро? Я просматривал множество ресурсов в Интернете и, к сожалению, не могу заставить его работать. С нетерпением ждем ваших предложений.


person Neophile    schedule 11.05.2015    source источник
comment
Я пробовал это, но не нашел этот ответ полезным, и я думаю, что CORS все еще не включен на моем сервере, несмотря на то, что я упомянул выше. Есть ли еще шаги, чтобы проверить это?   -  person Neophile    schedule 11.05.2015
comment
Ок Микавели. Я попробую. Я опубликую через минуту с моей находкой.   -  person Neophile    schedule 11.05.2015


Ответы (1)


Ваш web.xml выглядит нормально, поэтому я ожидаю, что он установит заголовок ответа в соответствии с запросом (ваш вопрос в любом случае не проясняет это).

Однако в некоторых современных браузерах (Chrome, Firefox и т. д.) вы обнаружите, что они не разрешают использование подстановочных знаков:

<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
    <param-name>cors.allowed.origins</param-name>
    <param-value>*</param-value>
</init-param>

Вместо этого вам нужно будет указать ожидаемый домен для большей безопасности:

<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
    <param-name>cors.allowed.origins</param-name>
    <param-value>http://otherdomain.com</param-value>
</init-param>

Полезно, что список источников может быть разделен запятыми:

Можно указать *, чтобы разрешить доступ к ресурсу из любого источника. В противном случае может быть предоставлен белый список источников, разделенных запятыми. Например: http://www.w3.org, https://www.apache.org. По умолчанию: * (Любому источнику разрешен доступ к ресурсу)

Источник: https://tomcat.apache.org/tomcat-7.0-doc/config/filter.html

person Michael    schedule 11.05.2015
comment
Спасибо за Ваш ответ. Я все еще получаю сообщение об ошибке при выполнении моего запроса, и я чувствую, что CORS еще не включен. Я меняю файл web.xml из области apache-tomcat-7.0.52/conf/web.xml. Я получаю сообщение об ошибке: {readyState:0,status:0,statusText:NetworkError: не удалось выполнить «отправить» для «XMLHttpRequest»: не удалось загрузить «url».} И мой DOM показывает ошибку, о которой я упоминал в своем вопросе. - person Neophile; 11.05.2015
comment
Как выглядят заголовки ответа сервера? Вы можете просмотреть их в окне разработчика браузера на вкладке сети. - person Michael; 11.05.2015
comment
Заголовок ответа сервера выглядит нормально и дает правильный ответ, т.е. 200. Content-Length:66 Content-Type:application/json;charset=UTF-8 Date:Mon, 11 May 2015 15:45:43 GMT Server:Apache-Coyote/1.1 - person Neophile; 11.05.2015
comment
Кроме того, помните, что ваши заголовки должны точно совпадать (см. stackoverflow.com/questions/13146892/). Я бы предложил удалить все дополнительные параметры в вашем вопросе и повторить попытку, чтобы увидеть, есть ли у вас где-то неправильная конфигурация. - person Michael; 11.05.2015
comment
Да, я удалил все дополнительные параметры и оставил только тот, который мне нужен, но все равно получаю сообщение об ошибке. - person Neophile; 11.05.2015
comment
Есть ли способ узнать, включен ли CORS на моем сервере? - person Neophile; 11.05.2015
comment
Взгляните на stackoverflow.com/q/21792759/827480. У меня были похожие проблемы с CORS в прошлом, и я закончил подключение отладчика к Tomcat, чтобы пройти через фильтр. Если мне не изменяет память, вы можете изменить параметры регистратора, чтобы видеть операторы отладки из фильтра, но у меня нет доступа к источникам отсюда, и я не помню их достаточно хорошо навскидку. - person Eric B.; 11.05.2015
comment
Так что лучше я проверю запрос и параметры ответа и удостоверюсь, что получу все обратно. Есть ли способ указать, что я хотел бы иметь определенные параметры в своем ответе? - person Neophile; 12.05.2015
comment
Самое главное — убедиться, что все отправляемые вами заголовки находятся в определении фильтра CORS. Деликатный случай. Вы можете использовать прокси-сервер, такой как fiddler или charles (или даже инструменты браузера, в зависимости от того, откуда поступают ваши запросы) и проверить, что все разрешенные заголовки перечислены в вашем определении CORS. - person Eric B.; 12.05.2015