如何使用XMLHttpRequest标头绕过授权?

时间:2015-10-05 07:56:09

标签: javascript ajax

我正在尝试访问需要授权的图表(网址类型为图片),并将其显示在fancybox中。因此我尝试使用XMLHttpRequest首先在头中发送授权并再次访问此URL,因为授权已经在缓存中绕过,这就是我将异步设置为false的原因。这是我的代码:

function showDiagram(row){
    var authCode = $("#authCode").text();
    var header = "basic" + authCode;
    console.log("In show diagram");
    var id = row.children().eq(6).text();
    openURL = restURL + "/service/runtime/process-instances/" + id + "/diagram";
    console.log(openURL);
    var xhr
    if(window.XMLHttpRequest){
        xhr = new XMLHttpRequest();
    }
    else{
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xhr.open("GET", openURL, false);
    xhr.setRequestHeader("Authorization", "Basic " + authCode);
    xhr.send();
    console.log(xhr.status);
    if(xhr.status==200){
        callFancybox(openURL);
    }else{
        alert("The diagram cannot be shown!");
    }
}

但是,我遇到了两种不同的错误情况。

  1. 当我第一次访问网址时,浏览器仍然要求我输入用户名和密码,同时,控制台打印输出状态= 200并且fancybox已经弹出,如果我拒绝输入密码,则为GET将返回401(未经授权)错误。如果我输入了密码,该图表将显示在fancybox中,它将适用于我尝试访问的所有其他网址。
  2. 控制台打印输出状态= 200,并且fancybox将弹出并显示“无法加载请求的内容。 请稍后再试。“并且将返回GET 401(未经授权)错误。
  3. 为什么会这样?我该怎么做才能绕过自动登录并在fancybox中显示网址?非常感谢您的任何想法!

1 个答案:

答案 0 :(得分:0)

您没有指定服务器端的内容,问题就在那里。您必须修改服务器,以便它支持您的标头身份验证。根据您当前的实现,服务器会忽略标头,因此您要以不同的方式识别它。

除此之外,您不会发送任何凭据或其他任何凭据。您必须添加包含该信息的标题。