2013-12-16 66 views
0

我有一個現有的Java客戶端上的IOS,andriod開發人員準備了一個簡單的http請求爲基礎的應用程序。我試圖在HTML5應用中實現相同的功能。發送樸素ajax HTTP請求與自定義標題

而現在我面臨的困難是在AJAX請求中發送一個自定義標題,就像使用加密登錄細節進行授權一樣。

我試圖在各種REST客戶端上實現相同的功能,並能夠在請求標頭中發送「AUTHORIZATION:BASIC XXXXXX =」。並得到適當的JSON響應」

enter image description here

但是,如果我同樣使用Ajax調用嘗試我無法發送類似的請求頭。請求發送作爲選項,而不是GET和授權標籤不正確會爲標題代替它的將是「訪問控制請求報頭:授權」。

,這裏是我曾嘗試片斷

<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

感謝您的回覆。我明白這是CORS的理由,但爲什麼它在我的REST,HTTP瀏覽器客戶端和移動應用程序中工作。但不是在我的AJAX調用? –

+1

跨域策略不是HTTP的一部分,它是Web瀏覽器實現的一項功能,可提高安全性。因此,只有網頁瀏覽器受制於跨域的規則。 – levi

+0

請參閱 - http://en.wikipedia.org/wiki/Same-origin_policy – levi