Access-Control-Allow-Origin不允许指定源url



我知道关于这个错误已经有很多问题了。但是,即使在设置了header

之后,我仍然无法使其工作
         "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调用

$.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");
    }
});

我试着从chrome的dev-http客户端调用我的REST api,它工作得很好(响应头有Access-Control-Allow-Origin:* set)。但是,当我从我的html文件调用它时,我得到了错误。

我使用JBoss作为我的rest api和tomcat来托管我的客户端网页

由于您正在发送内容类型为application/json的请求,因此客户端被迫执行CORS预飞行请求。

CORS规范指出,除了application/x-www-form-urlencoded, multipart/form-datatext/plain以外的任何内容类型都需要飞行前请求来确定是否允许标头。

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

为了简单起见,让服务器用报头来响应:

Access-Control-Allow-Headers: *

允许所有的请求头。

我又读了一遍你的问题,发现了一些我不明白的东西:为什么你要在第一个地方发送Content-Type头HTTP GET请求?这是不对的。

就移除
headers: { 
   "Content-type" : "application/json"
}

,再试一次。那也许能解决问题!

相关内容

  • 没有找到相关文章

最新更新