我正在为消费者制作自制API,并且在设置授权标题时遇到严重困难。我正在使用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。
其他信息:
有什么想法吗?
答案 0 :(得分:1)
我发现了问题所在。自制服务将此作为全局标题发送回客户端:“Access-Control-Allow-Headers”,其中只包含“Content-Type”。
这样,我们不使用用户代理(浏览器)的客户端会忽略这些标头,并且无论如何都只是发送了标头。但是浏览器试图优化请求并说“它不会接受授权头,所以我会在发送之前剪切它。”这种方式是包装更小,服务也不会允许它(虽然它确实...)
所以只需将“授权”添加到服务的访问控制允许标题部分,我的Javascript / JQuery / Ajax请求就像正常一样发送请求标头!