Ajax授权请求标头一次又一次失败

Arn*_*nja 6 javascript ajax jquery authorization header

我正在为一个自制API的消费者工作,并且在设置Authorization标头时遇到了严重的困难.我正在使用JQuery来处理Ajax请求,但'beforeSend'根本不起作用(使用fiddler来检查请求)

这是我的beforeSend代码:

    $.ajax({
     type: "GET",
     url: url+"/Projects",
     contentType: "application/json; charset=utf-8",
     beforeSend: function (req) {
        req.setRequestHeader("Authorization", AuthBuilder(username, password));
     },
     success: function (result) {
        alert("success");
     },
     error: function (xhr, ajaxOptions, thrownError) {
        alert("fail");
     }
 });
Run Code Online (Sandbox Code Playgroud)

那么如果失败你会怎么做?回到发送ajax请求的旧方式......这也不起作用......

这是我的常规代码:

function GET(address, callback, error) {
Request = getXMLHttpObject();
Request.open("GET", url + address, true);

var base64 = Base64.encode(username + ":" + password);
alert(base64);
Request.setRequestHeader("Authorization", "Basic " + base64);

Request.send();
Request.onreadystatechange = function () {
    //alert(Request.readyState+" code "+Request.status);
    if (Request.readyState == 4 && Request.status == 200) {
        callback(jQuery.parseJSON(Request.responseText));
    } else if (Request.readyState == 4 && Request.status >= 400) {
        error(Request.status, Request.statusText);
    }
} 
}
Run Code Online (Sandbox Code Playgroud)

不要介意我没有特别要求json因为服务默认返回json .

其他信息:

  • 原产地无关紧要,服务允许所有来源(已经过测试和确认)
  • 授权通过标头设置(在其他客户端中测试)
  • 授权标头只是不发送
  • AuthBuilder(用户名,密码))提供Basic Auth标头内容的正确格式
  • getXMLHttpObject()只是一些复制粘贴代码并且以前工作过

有什么想法吗 ?

Arn*_*nja 1

好吧,我发现了问题所在。自制服务将其作为全局标头发送回客户端:“Access-Control-Allow-Headers”,其中仅包含“Content-Type”。

这样,我们不使用用户代理(浏览器)的客户端就会忽略这些标头,并且只是发送标头。但浏览器尝试优化请求并表示“它不会接受授权标头,因此我将在发送之前将其剪切”。这种方式是包裹较小,并且服务无论如何都不允许(尽管确实如此......)

因此,只需将“授权”添加到服务的访问控制允许标头部分即可使我的 Javascript/JQuery/Ajax 请求正常发送请求标头!