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

我正在为一个自制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(用户名,密码))提供Basic Auth标头内容的正确格式
  • getXMLHttpObject()只是一些复制粘贴代码并且以前工作过

有什么想法吗 ?

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

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

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