使用jquery和ajax发送授权标头

bre*_*rer 5 authentication jquery json get xmlhttprequest

我已经在stackoverflow上查看了以下问题,但我没有尝试做什么.

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

jQuery Ajax未经授权的401错误

使用跨域帖子发送凭据?

这是我目前拥有的代码:

    $(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>
Run Code Online (Sandbox Code Playgroud)

我拥有的子域名受.htpasswd文件的密码保护.使用base64编码中使用的用户名/密码组合,网站的登录对我来说很好.

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

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

小智 6

标题名称是Authorization,您正在发送" Authentication"

例如

授权:基本QWxhZGRpbjpvcGVuIHNlc2FtBmU =


j_m*_*lly 4

JSONP 使用脚本标签代理。它不支持自定义标头。您能控制终点吗?如果是这样,请考虑启用 CORS,或在 GET 字符串中传递身份验证密钥。

使用 jsonp 时,JQuery 将您的 URL“ajax”请求转换为:

<script src="[endpoint]"></script>
Run Code Online (Sandbox Code Playgroud)

然后它编写一个随机函数

var json9409d0sf0d9s0df90 = function() {
     //some callback logic here.
}
Run Code Online (Sandbox Code Playgroud)

并附加 ?callback=json9409d0sf0d9s0df90

然后你的服务器说

echo $_GET['callback] . "(" . $json . ")";
Run Code Online (Sandbox Code Playgroud)

并将其作为响应发回

json9409d0sf0d9s0df90({some: data});
Run Code Online (Sandbox Code Playgroud)

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

AFAIK,<script src=""></script>资产加载不会采用任何标准浏览器的自定义标头。