Ho un server basato su REST che sto cercando di comunicare con JQuery. Sia XML che JSON sono disponibili come formati di risposta, quindi sto usando JSON.JQuery chiamate Ajax con autenticazione di base HTTP
I collegamenti sono tutti SSL in modo autenticazione di base HTTP è stato il nostro metodo di autorizzazione di scelta, e non abbiamo avuto problemi con gli altri front-end (crudo Javascript, Silverlight, etc ...)
Ora sto cercando mettere insieme qualcosa con JQuery e avere problemi infiniti usando l'autenticazione di base HTTP.
ho perlustrato attraverso numerose domande precedenti la maggior parte delle quali hanno o soluzioni che non sembrano funzionare in atto o la colpa l'intero problema sull'accesso origine croce, che ho già superato nel test di base Javascript. Le risposte forniscono sempre Access-Control-Allow-Origin
impostato sull'intestazione Origin fornita nella richiesta e questo può essere visualizzato nelle risposte dei miei test.
in JavaScript di base, questo intero chiamata è molto semplice realizzato con:
req.open('GET', 'https://researchdev-vm:8111/card', true, 'test', 'testpassword');
Il tentativo JQuery a questo è piuttosto standard:
$.ajax({
username: 'test',
password: 'testpassword',
url: 'https://researchdev-vm:8111/card',
type: 'GET',
dataType: 'json',
crossDomain: true,
/*data: { username: 'test', password: 'testpassword' },*/
beforeSend: function(xhr){
xhr.setRequestHeader("Authorization",
//"Basic " + encodeBase64(username + ":" + password));
"Basic AAAAAAAAAAAAAAAAAAA=");
},
sucess: function(result) {
out('done');
}
});
L'unico metodo che sembra effettivamente funzionare per fornire l'autenticazione è l'inserimento diretto dei dati codificati Base64 nella funzione beforeSend()
. Se questo non è incluso, non ci sono progressi fatti di sorta. Le proprietà di nome utente e password sembrano essere completamente ignorate.
Con il comportamento beforeSend()
fornito, la chiamata GET ottiene una risposta positiva con i dati inclusi. Tuttavia, poiché si tratta di una chiamata cross-site, una chiamata OPTIONS viene eseguita prima della chiamata GET e fallisce sempre, poiché non utilizza beforeSend()
e pertanto ottiene una risposta 401 a causa dell'autenticazione non riuscita.
C'è un modo migliore per realizzare ciò che dovrebbe essere una chiamata molto banale? Il fatto che la richiesta OPTIONS non utilizzi l'elaborazione della funzione beforeSend()
può essere considerata un bug? C'è forse un modo per disattivare completamente il controllo OPTIONS? Non è possibile effettuare questa chiamata non cross-site, poiché JavaScript sembra considerare anche un numero di porta diverso sulla stessa macchina di "cross-site".
Non avere la prima di inviare ei campi nome utente/password . Rimuoverei i campi username/password dalla funzione $ .ajax. –