使用jquery和ajax发送授权标头

时间:2012-04-11 20:59:43

标签: jquery json authentication get xmlhttprequest

我已经在stackoverflow上查看了以下问题,但在我试图做的事情上没有运气。

Ajax Authorization Request headers fails again and again

jQuery Ajax Unauthorized 401 Error

Sending credentials with cross-domain posts?

这是我目前拥有的代码:     

    $(document).ready(function() {
        $.ajax({
            url: 'http://sample.domain.com/script.php?name1=value1&jsonp=?',
            type: 'GET',
            dataType: 'json',
            contentType: "application/json",
            beforeSend: function(xhr) {
                 xhr.setRequestHeader("Authentication", "Basic ZnJvbWFwcGx********uOnRoM24zcmQ1UmgzcjM=") //Some characters have been replaced for security but this is a true BASE64 of "username:password"
            },
            success: function(data){
                alert(data);
            }
        });
    });


</script>

我所拥有的子域名受.htpasswd文件的密码保护。使用base64编码中使用的用户名/密码组合,网站的登录工作正常。

我在不同于url所在的域上运行此脚本,这就是为什么我有jsonp =?在网址

我在浏览器中从控制台获取的响应是:     GET http://sample.domain.com/script.php?name1=value1&jsonp=jsonp1334177732136 401 (Authorization Required)

2 个答案:

答案 0 :(得分:6)

标题名称为Authorization,您要发送“Authentication

e.g。

  

授权:基本QWxhZGRpbjpvcGVuIHNlc2FtBmU =

答案 1 :(得分:4)

JSONP使用脚本标记代理。它不支持自定义标头。你控制了端点吗?如果是这样,请查看启用CORS,或在GET字符串中传递身份验证密钥。

使用jsonp时,JQuery会转换你的URL&#34; ajax&#34;请求:

<script src="[endpoint]"></script>

然后写一个随机函数

var json9409d0sf0d9s0df90 = function() {
     //some callback logic here.
}

并追加?callback = json9409d0sf0d9s0df90

您的服务器然后说

echo $_GET['callback] . "(" . $json . ")";

并将其作为回复发回

json9409d0sf0d9s0df90({some: data});

由浏览器执行,由jQuery的神奇处理程序处理,使其像普通的ajax回调一样响应。

AFAIK,<script src=""></script>资产加载不会通过任何标准浏览器获取自定义标头。