我正在尝试发送跨域域并添加自定义“授权”标头。 请参阅下面的代码。
错误:
XMLHttpRequest无法加载{url}。请求标头字段Access-Control-Allow-Headers不允许授权。
function loadJson(from, to) {
$.ajax({
//this is a 'cross-origin' domain
url : "http://localhost:2180/api/index.php",
dataType : 'json',
data : { handler : "statistic", from : from, to : to
},
beforeSend : setHeader,
success : function(data) {
alert("success");
},
error : function(jqXHR, textStatus, errorThrown) {
alert("error");
}
});
}
function getToken() {
var cookie = Cookie.getCookie(cookieName);
var auth = jQuery.parseJSON(cookie);
var token = "Token " + auth.id + ":" + auth.key;
}
function setHeader(xhr) {
xhr.setRequestHeader('Authorization', getToken());
}
我也尝试过:
headers : { 'Authorization' : getToken() },
在ajax请求中。
是不是jquery-ajax框架阻止了跨源Authentification?我该如何解决这个问题?
更新
顺便说一下:有没有更安全的方法将auth.key存储在客户端然后存储在cookie中? getToken()将替换为更复杂的方法,散列正文,日期等。
答案 0 :(得分:64)
这是发出CORS请求的示例。如果您有权访问服务器(我假设您这样做,因为这是对localhost的请求),您将需要添加特定于CORS的响应头。最简单的方法是添加以下响应标头:
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Authorization
您的服务器还需要配置为响应HTTP OPTIONS请求。您可以在此处了解有关制作CORS请求的更多信息:http://www.html5rocks.com/en/tutorials/cors/