用于基本授权的 ajax 设置标头不起作用

Posted

技术标签:

【中文标题】用于基本授权的 ajax 设置标头不起作用【英文标题】:ajax set headers for basic authorization does not work 【发布时间】:2015-03-03 20:15:47 【问题描述】:

这是我的代码,我想请求一个跨域url以使用基于基本授权的API。

但它不起作用。请求标头中没有显示授权信息。

$(document).ready(function () 
    $.ajaxSetup(
        headers: 
            'Authorization': "Basic amlhemhc6SUxvdmVAkYXk="),
            'Content-Type': 'application/json;charset=utf-8'
        
    );
    var request = $.ajax(
        url: "http:localhost:8080/query",
        type: "POST",
        data: '"sql":"select count(*) from summary"',
        dataType: "json"
    );
    request.done(function (msg) 
        alert(msg);
    );

    request.fail(function (jqXHR, textStatus) 
        alert("Request failed: " + textStatus);
    );
);

【问题讨论】:

有点不相关,但请不要对 JSON 对象使用字符串。请改用JSON.stringify('sql': ....) ***.com/questions/5507234/… 你得到这个worin了吗? 【参考方案1】:

你的 ajax 应该看起来像这样,如果它仍然不起作用,那么你可以看看我关于 CORS here 的帖子之一,看看你面临什么问题

ajaxOpts = 
        url:"https://"+server_name+"/post_link/",
        crossDomain:true,
        xhrFields: withCredentials:true,
        type:'POST',
        data: jQuery('#some_form').serialize(),//or your data
        dataType:'json',
        success: 
            //do something
        ,
        error: 
            //do something
        ,
    ;
    jQuery.ajax(ajaxOpts);

希望对你有帮助

【讨论】:

【参考方案2】:

尝试将以下回调添加到您的$.ajax()

var request = $.ajax(
        url: "http:localhost:8080/query",
        type: "POST",
        data: '"sql":"select count(*) from summary"',
        dataType: "jsonp",
        processData: 'false',
        xhrFields: 
              withCredentials: 'true'
        ,
        crossDomain: 'true'
    );

【讨论】:

为了支持 cors 域请求,我在响应中添加了 Access-Control-Allow-Origin:*。因为当我按照你的建议进行修改时,抛出这样的错误(通配符 '*'当凭据标志为真时,不能在“Access-Control-Allow-Origin”标头中使用。因此,不允许访问源“localhost:9000”。) 您是否尝试过输入确切的域而不是使用*?由于我们使用的是凭据,因此您将收到此错误,因为它是安全的一部分。 Access-Control-Allow-Origin:your domain 是的,但仍然响应 401 状态码。请求标头中没有字段授权,应该在那里。

以上是关于用于基本授权的 ajax 设置标头不起作用的主要内容,如果未能解决你的问题,请参考以下文章

ReadyApi为什么授权标头不起作用,但基本的auth选项卡确实如此

PHP - 标头/配置“允许来源”不起作用

setRequestHeader 不起作用,我想设置我的标头,然后在 Amazon EC2 的 ajax 中发出 GET 请求

赛普拉斯版本更新后标头授权不起作用

授权标头在获取中不起作用 - React Native

c# httpclient 授权标头对我不起作用?