2015-01-05 172 views
2

當運行GWTTestCase使用GWT(使用Restlet-GWT)調用外部Restful服務時,該應用程序拋出下面的錯誤。GWTTestCase - HTMLUnit - 不允許「訪問控制 - 允許來源」

錯誤:

Jan 05, 2015 1:24:41 PM com.gargoylesoftware.htmlunit.javascript.background.JavaScriptJobManagerImpl runSingleJob 
SEVERE: Job run failed with unexpected RuntimeException: Wrapped java.lang.RuntimeException: No permitted "Access-Control-Allow-Origin" header. 
net.sourceforge.htmlunit.corejs.javascript.WrappedException: Wrapped java.lang.RuntimeException: No permitted "Access-Control-Allow-Origin" header. 
    at net.sourceforge.htmlunit.corejs.javascript.Context.throwAsScriptRuntimeEx(Context.java:1889) 
    at com.gargoylesoftware.htmlunit.javascript.host.xml.XMLHttpRequest.doSend(XMLHttpRequest.java:681) 
    at com.gargoylesoftware.htmlunit.javascript.host.xml.XMLHttpRequest.access$000(XMLHttpRequest.java:94) 
    at com.gargoylesoftware.htmlunit.javascript.host.xml.XMLHttpRequest$1.run(XMLHttpRequest.java:603) 
    at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:602) 
    at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:507) 
    at com.gargoylesoftware.htmlunit.javascript.background.JavascriptXMLHttpRequestJob.run(JavascriptXMLHttpRequestJob.java:36) 
    at com.gargoylesoftware.htmlunit.javascript.background.JavaScriptJobManagerImpl.runSingleJob(JavaScriptJobManagerImpl.java:328) 
    at com.gargoylesoftware.htmlunit.javascript.background.DefaultJavaScriptExecutor.run(DefaultJavaScriptExecutor.java:162) 
    at java.lang.Thread.run(Thread.java:744) 
Caused by: java.lang.RuntimeException: No permitted "Access-Control-Allow-Origin" header. 
    ... 9 more 

從我的研究,這似乎是一個問題,會的HtmlUnit不允許訪問跨域,是有一個變通與此?

回答

2
2

我被這個非常相同的錯誤響應難住,但我無法將Restlet框架重構到我的客戶端&服務器代碼庫中。

一些處理診斷問題的提示。

  1. 使用代理或inspect開發工具來記錄在請求和響應中的OPTIONS和GET/POST對的確切標題。
  2. OPTIONS請求標題「Origin」必須完全匹配響應標題「Access-Control-Allow-Origin」。沒有通配符。也許寫回應只是迴應請求,如:

    response.addHeader(「Access-control-allow-origin」,request.getHeader(「Origin」));

  3. 您的請求標頭名稱必須在OPTIONS「Access-control-request-headers」標頭值中完全枚舉,並與「Access-control-Allow-Headers」響應標頭匹配。

注意:#3中的不匹配將觸發相同的錯誤消息,因爲#2中的不匹配。

相關問題