【问题标题】:Ajax Authorization Request headers fails again and againAjax 授权请求标头一次又一次地失败
【发布时间】:2012-03-22 10:12:16
【问题描述】:

我正在开发一个自制 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");
     }
 });

如果失败了,你会怎么做?回到发送 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);
    }
} 
}

不要介意我没有专门要求 json,因为服务按默认返回 json。

在附加信息中:

  • 产地无所谓,服务允许所有产地(已测试确认)
  • 授权在由标头设置时有效(在其他客户端测试)
  • 只是没有发送授权标头
  • AuthBuilder(username, password)) 给出了基本 Auth 标头内容的正确格式
  • getXMLHttpObject() 只是一些复制粘贴代码,之前可以使用

有什么想法吗?

【问题讨论】:

    标签: javascript jquery ajax header authorization


    【解决方案1】:

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

    通过这种方式,我们的客户不使用用户代理(浏览器)会忽略这些标头,并且无论如何都只是发送标头。但是浏览器试图优化请求并说“它不会接受授权标头,所以我会在发送之前将其剪切掉。”这种方式是包裹更小,服务无论如何都不会允许它(虽然它确实......)

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

    【讨论】:

      猜你喜欢
      • 2015-03-15
      • 2021-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多