我正在尝试提出跨域请求。我知道CORS,并希望测试来自例如w3schools作为域的调用。
我正在使用Jersey作为REST API和Apache服务器,并执行了以下操作:
ResponseBuilder rb = Response.status(status).entity(mapper.writeValueAsBytes(data)).type(MediaType.APPLICATION_JSON);
**EDITED **
rb.header("Access-Control-Allow-Origin","*");
rb.header("Access-Control-Allow-Methods","GET, OPTIONS");
rb.header("Access-Control-Allow-Headers","*");
return rb.build
当我从浏览器中调用我的API查看我的响应标题时,我看到了
Access-Control-Allow-Headers:*
访问控制允许方法:获取,选项
Access-Control-Allow-Origin:*
缓存控制:私人
内容长度:2523
内容类型:application / json
日期:2013年4月17日星期三20:16:20 GMT
到期日:1969年12月31日星期三16:00:00太平洋标准时间
服务器:Apache-Coyote / 1.1
但是当我想使用不同的域(例如在W3学校中)测试它时,我有以下内容 -
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-1.9.1.min.js">
</script>
<script>
$(document).ready(function(){
$("button").click(function(){
$.ajax({
url: "url", // this is a real URL replaced with just url
type: 'GET',
success: function(content) { console.log("ok"); },
error: function(XMLHttpRequest, textStatus, errorThrown) {
console.log("error");
},
complete: function() { console.log("complete"); }
});
});
});
</script>
</head>
<body>
<button>Send an HTTP GET request to a page and get the result back</button>
</body>
我总是得到一个XMLHttpRequest无法加载:url:。 Access-Control-Allow-Origin不允许原点http://www.w3schools.com。
我的请求标题是
接受:* / *
来源:http://www.w3schools.com
推荐人:http://www.w3schools.com/jquery/tryit_view.asp?x=0.8691769954748452
User-Agent:Mozilla / 5.0(Windows NT 6.1; WOW64)AppleWebKit / 537.31(KHTML,类似Gecko)Chrome / 26.0.1410.64 Safari / 537.31
我也试过在jsfiddle中测试上面的内容,但是得到了同样的错误。
注意:我的网址仍在我的本地主机上,是否可能是问题?
我错过了什么?
答案 0 :(得分:0)
所以我解决了我的问题。
我必须这样做
jQuery.ajax({
url: 'url',
xhrFields: {
withCredentials: true
},
success : function(data) {alert(data); }
});
由于我的REST服务是需要身份验证的服务,我猜它需要在任何事情发生之前进行身份验证,所以一旦我这样做并在我的响应中指定了我的来源,我就能让它工作。