2013-12-16 4 views
0

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

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

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

enter image description here

Но если я стараюсь же с помощью Ajax вызова я не смог отправить подобный заголовок запроса. Запрос отправки в качестве опции вместо GET и тега авторизации не будет должным образом в качестве заголовка вместо этого он идет как «Access-Control-Request-Headers: разрешение»....

и вот отрывки я пытавшиеся

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

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

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

ответ

1

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

More on preflighted requests

+0

Благодарим за отзыв. Я понял, что это COS CORS, но почему он работает в моих REST, HTTP-браузерах и мобильных приложениях. но не в моих звонках AJAX? –

+1

Междоменная политика не является частью HTTP, ее функциональность веб-браузеров реализуется для повышения безопасности. Следовательно, только веб-браузеры подчиняются правилам междоменного доступа. – levi

+0

См. Http://ru.wikipedia.org/wiki/Same-origin_policy – levi

Смежные вопросы