2013-03-19 149 views
4

我知道有很多问题已经就此错误提出了许多问题。但是,即使在我的服务器端设置了标头访问控制 - 允许来源不允许访问源URL

  "Access-Control-Allow-Origin" : "*" 

后,我仍然无法获得此工作。

这里是我的Spring MVC控制器的方法:

@RequestMapping(method=RequestMethod.GET, value="dummy/{num}") 
    @ResponseBody 
    public ResponseEntity<Result> dummy(@PathVariable String num) 
    { 
     int n = Integer.parseInt(num); 
     final Result result = new Result(); 
     result.setAddition(n+20); 
     result.setMultiplication(n*20); 
     result.setSubtraction(n-20); 
     HttpHeaders headers = new HttpHeaders(); 
     headers.add("Access-Control-Allow-Origin", "*"); 
     ResponseEntity<Result> ent = new ResponseEntity<Result>(result,headers,HttpStatus.CREATED); 
     return ent; 
    } 

这里是jQuery的

$.ajax({ 
    url: "http://localhost:8010/Probe_Rest_Service/test/dummy/9", 
    type: "get", 
    crossDomain: true, 
    dataType: 'json', 
    headers: { 
    "Content-type" : "application/json" 
    }, 

    success: function(data){ 

     console.log("It worked!"); 
     alert(data); 
    }, 

    error: function(){ 
     // enable the inputs 
     alert("error"); 
    } 
}); 

我的AJAX调用我打过电话从开发的HTTP客户端我的REST API的铬和它的工作原理罚款(响应头具有Access-Control-Allow-Origin:*设置)。但是,当我从我的HTML文件调用它时,我得到了错误。

我使用JBoss为我的REST API和tomcat主办我的客户端网页

+0

请注意,'crossDomain:true'不是必需的。 – 2013-03-19 21:07:55

+0

你是否正在使用chrome从网络服务器进行html文件测试? – 2013-03-19 21:10:42

+0

@KevinB是的,这是正确的 – CuriousCoder 2013-03-19 21:15:48

回答

3

既然你要发送的内容类型application/json请求的客户端被强制做CORS飞行前请求。

CORS specification说比application/x-www-form-urlencodedmultipart/form-data,或其他text/plain任何内容类型需要飞行前请求,以确定标头是否被允许。

因此,您需要处理飞行前请求(HTTP方法= OPTIONS)。

为简单起见,让服务器与头回应:

Access-Control-Allow-Headers: * 

这将允许所有的请求头。

UPDATE

我再次看了你的问题,并发现了一些我不明白你为什么要送Content-Type头摆在首位的HTTP GET请求?这是不正确的。

只是删除

headers: { 
    "Content-type" : "application/json" 
} 

,然后再试一次。这可能会解决它!

+0

非常感谢。这工作:) – CuriousCoder 2013-03-20 15:41:10

+0

对于POST请求,我仍然得到交叉来源错误,我试图通过处理飞行前请求,如你所建议的那样解决它。为此,你的意思是我必须发送一个HTTP头设置为“Access-Control-Allow-Headers:*”的空响应。 – CuriousCoder 2013-03-20 15:58:57

相关问题