首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >发送带有自定义标头的普通ajax请求

发送带有自定义标头的普通ajax请求
EN

Stack Overflow用户
提问于 2013-12-16 11:59:40
回答 1查看 2.2K关注 0票数 0

我有一个现有的java客户端,上面有IOS,andriod开发人员准备了一个简单的基于http请求的应用程序。我正试图在HTML5应用程序中实现同样的目标。

现在所面临的困难是在AJAX请求中发送一个自定义的头部,比如带有加密登录细节的授权。

我试图在各种REST客户端上实现相同的功能,并能够在请求头中发送“授权:基本XXXXXX=”。并得到正确的json反应“

但是,如果我尝试使用ajax调用相同,则无法发送类似的请求头。请求发送为选项而不是GET,授权标记没有作为头正确地运行,而是以"Access-Control-Request-Headers:authorization".的形式进行

这是我试过的片段。

代码语言:javascript
复制
 <script>
    //$.ajaxSetup({ headers: { 'Authorization': 'Basic XXXXXXX='} })


    // get form data for POSTING       
    var vFD = new FormData(document.getElementById('upload_form'));
    var oXHR = new XMLHttpRequest();
    oXHR.open('POST', "https://123.123.123.123:229/");
    //oXHR.send(vFD);



    var body = 'Basic XXXXXXX=';
    var mUrl = "https://123.123.123.123:229/?json";
    var client = new XMLHttpRequest();
    client.open('GET', mUrl, true);
    client.withCredentials = true;
    client.crossDomain = true,

    client.setRequestHeader('Authorization', 'Basic XXXXXXX=');
    client.send(body);



    simpleHttpRequest();
    function simpleHttpRequest() {
        alert("calling ");

        var headers = {
            "Authorization": "Basic XXXXXXX="
        };
        $.ajaxSetup({ "headers": headers });
        $.ajaxSetup({ 'cache': false });
        $.ajax({
            type: "GET",
            withCredentials: true,
            //                data: {
            //                    address: 'http://www.google.com'
            //                },
            crossDomain: true,
            Headers: { "Authorization": "Basic XXXXXXX=" },
            dataType: "jsonp",
            url: mUrl,
            cache: false
        });
    }

    xhrToSend();
    function xhrToSend() {
        // Attempt to creat the XHR2 object
        var xhr;
        try {
            xhr = new XMLHttpRequest();
        } catch (e) {
            try {
                xhr = new XDomainRequest();
            } catch (e) {
                try {
                    xhr = new ActiveXObject('Msxml2.XMLHTTP');
                } catch (e) {
                    try {
                        xhr = new ActiveXObject('Microsoft.XMLHTTP');
                    } catch (e) {
                        statusField('\nYour browser is not' +
                    ' compatible with XHR2');
                    }
                }
            }
        }
        xhr.withCredentials = true;
        xhr.open('GET', mUrl, true);
        xhr.setRequestHeader("Authorization", "numberOfBLObsSent");
        xhr.send();
    };
</script>

所有不同的方法都失败了。请帮帮我。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-16 15:57:44

这个问题与请求的跨域性质有关。当您发出包含自定义标头的跨域请求时,该请求首先通过OPTIONS方法“预置”到服务器,并且服务器必须使用报头Access-Control-Allow-Headers: your-custom-header进行响应。一旦收到这一消息,ajax客户端将(自动)发出实际请求。

更多关于预先准备的请求

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20610433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档