jquery.ajax()的跨源"授权"标题

Joh*_*lin 40 javascript ajax jquery cross-domain

我正在尝试发送跨域域并添加自定义"授权"标头.请参阅下面的代码.

错误:

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());
}
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

headers : { 'Authorization' : getToken() },
Run Code Online (Sandbox Code Playgroud)

在ajax请求中.

是不是jquery-ajax框架阻止了跨源的Authentification?我怎样才能解决这个问题?

更新:

顺便说一句:有没有更安全的方法将auth.key存储在客户端然后存储在cookie中?getToken()将被更复杂的方法替换,散列正文,日期等.

mon*_*sur 65

这是发出CORS请求的示例.如果您有权访问服务器(我假设您这样做,因为这是对localhost的请求),您将需要添加特定于CORS的响应头.最简单的方法是添加以下响应标头:

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Authorization
Run Code Online (Sandbox Code Playgroud)

您的服务器还需要配置为响应HTTP OPTIONS请求.您可以在此处了解有关制作CORS请求的更多信息:http://www.html5rocks.com/en/tutorials/cors/

  • 嗯..我忘记了这三个标题中的最后一个.我只是发送Origin和Methods.愚蠢的错误.:)是的,我实施了OPTIONS.好的链接!谢谢 (3认同)