2014-01-10 5 views
1

을 반환 할 때 실패부두 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> 

어떤 생각?

답변

0

A가 B에 대해 Access-Control-Allow-Origin 헤더를 보내지는 않지만 C에 해당하는 경우 CORS 구성이 잘못 되었습니까?

CORS를 A에 구성한 방법을 지정하지 않았습니다 (부두의 CrossOriginFilter을 사용하고 있습니까?).

부두 러너 (귀하의 전쟁을 전개하는 부두 임베디드 임)가 웹 응용 프로그램의 CORS 구성을 엉망으로 만드는 이유는 없습니다.

+0

예 CrossOriginFilter를 사용하고 있습니다. 응용 프로그램의 web.xml 파일 내용을 추가하여 질문을 업데이트했습니다. 좀 봐 주시겠습니까? –

+0

'web.xml'이 좋아 보인다. CORS 필터에 대한 디버그 로깅을 활성화하려고 시도 했습니까? 헤더가 추가되는지 여부를 알려 주어야합니다. – sbordet

+0

브라우저가 서버에서 응답을 받기 전에 30 초에 바로 연결을 종료하고 있다고 생각했습니다. 30000 25000으로 변경했으며 문제가 해결되었습니다. –