我正在與碼頭,亞軍在Heroku Java應用程序失敗(我們稱之爲網站)碼頭CORS正常工作在Heroku用的cometd但是當的cometd返回
然後,我有一個Web應用程序上的網站B上運行,使用Cometd連接到A。
Comet連接保持打開狀態30秒,然後在沒有收到服務器數據的情況下返回。
我在Jetty的web.xml中設置了CORS參數,以便B訪問A時沒有任何問題。
現在的問題:如果彗星的30秒飾面和服務器不返回任何東西,然後在瀏覽器拋出這個錯誤:
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.
我正在另一個使用嵌入式碼頭相同的Java應用程序網站(網站C)具有相同的CORS設置,一切正常。特別是,當彗星連接在30秒後返回時,響應具有包括'Access-Control-Allow-Origin'的所有標題。但是,在網站A上,comet返回後,響應沒有標題。
所以,對我來說,這個問題是由Jetty Runner在30秒後沒有返回響應引起的,而嵌入式jetty則是以正確的頭文件返回響應。
我的web.xml文件內容:
<?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>
任何想法如何解決這一問題probem?
是的,我正在使用CrossOriginFilter。我通過添加應用程序的web.xml文件的內容來更新我的問題。你可以看看嗎? –
'web.xml'看起來不錯。您是否嘗試啓用CORS過濾器的調試日誌記錄?這應該告訴你,如果標題被添加,如果沒有,爲什麼不。 – sbordet
我猜想,在收到服務器的響應之前,瀏覽器正在終止30秒的連接。我將 30000 param-value>更改爲 25000 param-value>,問題就消失了。 –