2015-01-05 125 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中的不匹配。

相关问题