Ubuntu 12.10
Tomcat 7.0.41
Chrome 27.0.1453.116
Я хотел бы использовать новый, родной CORS
фильтр Tomcat, чтобы позволить Access-Control-Allow-Origin: *
. Конфигурация кажется достаточно простым, но, когда я использую «Инструменты разработчика» Chrome или Firefox»Firebug для проверки Access-Control-Allow-Origin: *, он не отображается в заголовке ответа:7 CORS кот фильтр
Request URL:http://XXX.XXX.XX.99:8984/SimpleServlet/simple-servlet
Request Method:GET
Status Code:200 OK
Request Headersview source
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
DNT:1
Host:198.100.45.99:8984
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36
Response Headersview source
Content-Length:103
Content-Type:text/html;charset=ISO-8859-1
Date:Mon, 24 Jun 2013 00:19:30 GMT
Server:Apache-Coyote/1.1
Для тестирование, я развернул простой сервлет и настроил следующее в WEB-INF/web.xml.
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3.0.xsd"
version="3.0">
<servlet>
<servlet-name>SimpleServlet</servlet-name>
<servlet-class>com.javaranch.codebarn.servletjsp.SimpleServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SimpleServlet</servlet-name>
<url-pattern>/simple-servlet</url-pattern>
</servlet-mapping>
<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.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</param-value>
</init-param>
<!--
<init-param>
<param-name>cors.logging.enabled</param-name>
<param-value>true</param-value>
</init-param>
-->
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Что мне не хватает? Я также попробовал java классы/фильтр Juvinov's и попытался настроить фильтр в WEB-INF/web.xml и $ CATALINA_BASE/conf/web.xml. Что может блокировать эту конфигурацию?
Как устранить эту проблему? Похоже, что в исходном предложении eBay cors-filter был параметр для переключения журнала, но это не отражено в документации Tomcat v7.0.41.
Можете ли вы предоставить заголовки запросов? Первое, что я хотел бы сделать, это проверить, добавляет ли браузер заголовок «Origin» для запроса. Согласно спецификации, когда браузеры обнаруживают, что запрос является запросом на перекрестный исход, они добавляют заголовок «Origin». Если запрос не содержит заголовок «Origin», CorsFilter будет передавать запрос. – mohitsoni
Если браузер не добавляет заголовок «Origin» для запроса, это означает, что запрос не является запросом на перекрестный поиск. – mohitsoni
Возможно, вы захотите проверить, действительно ли запрос является запросом на перекрестный поиск. Например: если страница отправлена в начале 'http: // localhost: 8080', тогда она должна делать запрос к любому происхождению, а' http: // localhost: 8080' (для запроса - перекрестное происхождение). Чтобы имитировать, вы можете отредактировать свой/etc/hosts и сопоставить «127.0.0.1» с ex: 'localhost.cors'. Затем измените свой JavaScript, чтобы сделать запрос на 'http: //localhost.cors: 8080' со страницы, которая была отправлена с' http: // localhost: 8080' (или наоборот). – mohitsoni