与jquery.ajax()交叉来源的“授权”标题
我试图发送一个跨域的域名,并添加一个自定义的“授权”标题。 请参阅下面的代码。
错误:
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框架阻止跨来源authentication? 我该如何解决这个问题?
更新:
顺便说一句:有没有一种更安全的方法来存储auth.key在客户端然后在cookie中? getToken()将被更复杂的方法所取代,散列正文,date等。
这是制作CORS请求的一个例子。 如果您有权访问服务器(我假设您这样做,因为这是对本地主机的请求),您将需要添加CORS特定的响应标头。 最简单的方法是添加下面的响应头文件:
Access-Control-Allow-Origin: * Access-Control-Allow-Methods: GET, POST, PUT, DELETE Access-Control-Allow-Headers: Authorization
您的服务器还需要configuration为响应HTTP OPTIONS请求。 您可以在这里了解更多有关CORS请求的信息: http : //www.html5rocks.com/en/tutorials/cors/