을 반환 할 때 실패부두 CORS가 cometd와 Heroku가에서 잘 작동하지만 cometd 내가 Heroku가에 부두 - 러너와 자바 응용 프로그램을 실행하고
가 그럼 난 웹 사이트 B에서 실행되는 웹 응용 프로그램을 가지고 (의이 웹 사이트의 IT 부르 자) Cometd를 사용하여 A에 연결.
혜성 연결은 30 초 동안 열린 상태로 유지되고 서버에서 데이터가 수신되지 않으면 반환됩니다.
B가 A에 문제없이 액세스 할 수 있도록 Jetty의 web.xml에 CORS 매개 변수를 설정했습니다. 이제
문제 :
XMLHttpRequest cannot load [Website A]/cometd.
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin '[Website B]' is therefore not allowed access.
나는 다른에 포함 된 부두를 사용하여 동일한 자바 응용 프로그램을 실행하고 있습니다 : 혜성의 30초 완료하고 아무 것도 반환하지 않습니다 서버가 다음 브라우저가이 오류가 발생하는 경우 웹 사이트 (웹 사이트 C)는 CORS 설정이 동일하고 모든 것이 잘 작동합니다. 특히 혜성 연결이 30 초 후에 돌아 오면 응답에는 'Access-Control-Allow-Origin'을 포함한 모든 헤더가 있습니다. 그러나 웹 사이트 A에서 혜성이 돌아온 후에 응답에는 헤더가 없습니다.
내게는 입니다. 문제는 Jetty-Runner가 올바른 헤더로 응답을 반환하는 내장 된 부두와 비교하여 30 초 후에 응답을 반환하지 않기 때문입니다.
내 web.xml의 내용 : 방법이 probem를 해결하는
<?xml version="1.0" encoding="UTF-8"?>
<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_2_5.xsd"
version="2.5">
<filter>
<filter-name>cross-origin</filter-name>
<filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
<init-param>
<param-name>allowedOrigins</param-name>
<param-value>[Website B]</param-value>
</init-param>
<init-param>
<param-name>allowedMethods</param-name>
<param-value>GET,POST,DELETE,PUT,HEAD,OPTIONS</param-value>
</init-param>
<init-param>
<param-name>allowedHeaders</param-name>
<param-value>origin, content-type, cache-control, accept</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>cross-origin</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>cometd</servlet-name>
<servlet-class>org.cometd.server.CometdServlet</servlet-class>
<init-param>
<param-name>logLevel</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>timeout</param-name>
<param-value>30000</param-value>
</init-param>
<init-param>
<param-name>jsonDebug</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<!--
To use async-supported in a servlet 3.0 compliant container,
uncomment the following tag:
<async-supported>true</async-supported>
and change the web-app tag of this document to:
<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-mapping>
<servlet-name>cometd</servlet-name>
<url-pattern>/cometd/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>admin</servlet-name>
<servlet-class>org.coweb.servlet.AdminServlet</servlet-class>
<load-on-startup>2</load-on-startup>
<init-param>
<param-name>ConfigURI</param-name>
<param-value>/WEB-INF/cowebConfig.json</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>admin</servlet-name>
<url-pattern>/admin/*</url-pattern>
</servlet-mapping>
</web-app>
어떤 생각?
예 CrossOriginFilter를 사용하고 있습니다. 응용 프로그램의 web.xml 파일 내용을 추가하여 질문을 업데이트했습니다. 좀 봐 주시겠습니까? –
'web.xml'이 좋아 보인다. CORS 필터에 대한 디버그 로깅을 활성화하려고 시도 했습니까? 헤더가 추가되는지 여부를 알려 주어야합니다. – sbordet
브라우저가 서버에서 응답을 받기 전에 30 초에 바로 연결을 종료하고 있다고 생각했습니다. 30000 param-value>을 25000 param-value>으로 변경했으며 문제가 해결되었습니다. –