我正在尝试发送跨域域并添加自定义的“授权”标头。请参见下面的代码。
错误:
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框架阻止了跨域身份验证?我怎样才能解决这个问题?
更新:
顺便说一句:是否有一种更安全的方法将auth.key存储在客户端,然后再存储在cookie中?getToken()将被更复杂的方法取代,该方法对正文,日期等进行哈希处理。
这是发出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/