Отправка простого HTTP-запроса AJAX с пользовательским заголовком

0

У меня есть существующий java-клиент, поверх которого IOS, разработчики andriod подготовили простые приложения на основе http-запросов. И я пытаюсь добиться того же в приложении HTML5.

И сейчас проблема заключается в отправке пользовательского заголовка в запрос AJAX, например, авторизацию с зашифрованными регистрационными данными.

Я пытался достичь этого на разных клиентах REST и смог отправить "AUTHORIZATION: BASIC XXXXXX =" в заголовок запроса. И получить правильный ответ json "

Изображение 174551

Но если я пытаюсь использовать один и тот же, используя вызов ajax, я не могу отправить подобный заголовок запроса. Запросить отправку как OPTIONS вместо GET, а тег авторизации не будет корректно использоваться в качестве заголовка, вместо этого он будет использоваться как "Access-Control-Request-Headers: authorization".

и вот фрагменты, которые я пробовал.

 <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>

И все разные способы получения неудачи. Пожалуйста, помогите мне.

Заранее спасибо.

Теги:
http-headers
xmlhttprequest

1 ответ

1
Лучший ответ

Эта проблема связана с междоменным характером запроса. Когда вы делаете междоменный запрос, который содержит пользовательские заголовки, запрос сначала "предваряется" серверу с помощью метода OPTIONS, и сервер должен отвечать заголовком Access-Control-Allow-Headers: your-custom-header. Как только это будет получено, клиент ajax затем (автоматически) выдаст фактический запрос.

Подробнее о запросах с предварительным освещением

  • 0
    Спасибо за ответ. Я понял, что это CORS, но почему он работает в моих клиентах REST, HTTP-браузерах и мобильных приложениях. но не в моих AJAX звонках?
  • 1
    Междоменная политика не является частью HTTP, она реализована в веб-браузерах для повышения безопасности. Следовательно, только веб-браузеры подчиняются правилам кросс-доменов.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню