我知道关于这个错误已经有很多问题了。但是,即使设置了标题
,我仍然无法使其正常工作 "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");
}
});
我尝试从dev-http客户端调用我的REST api进行chrome操作并且工作正常(响应头具有Access-Control-Allow-Origin:* set)。但是,当我从我的html文件中调用它时,我得到了错误。
我将JBoss用于我的rest api和tomcat来托管我的客户端网页
答案 0 :(得分:3)
由于您发送的内容类型为application/json
的请求,客户端将被迫执行CORS转机前请求。
CORS specification表示除application/x-www-form-urlencoded
,multipart/form-data
或text/plain
以外的任何内容类型都需要提前发出请求以确定是否允许标头。
因此,您需要处理飞行前请求(HTTP方法= OPTIONS
)。
为简单起见,让服务器回复标题:
Access-Control-Allow-Headers: *
这将允许所有请求标头。
<强>更新强>
我再次阅读了您的问题,并发现了一些我不理解的内容:为什么您首先发送Content-Type
标头以获取HTTP GET请求?这是不正确的。
只需删除
headers: {
"Content-type" : "application/json"
}
然后再试一次。这可能会解决它!