2010-08-25 5 views
15

Ho alcuni file html/js locali con cui vorrei richiamare alcuni server remoti tramite https ed eventualmente utilizzare l'autenticazione di base per la richiesta.Autenticazione di base con jQuery.ajax request e jsonp

Sto incontrando due problemi. Il primo è che, se non specifico 'jsonp' per il tipo di dati, jQuery.ajax() richiesta restituisce l'errore:

Access to restricted URI denied code: 1012

sono le mie richieste considerati tra domini perché il mio file di lavoro principale viene memorizzato localmente, ma recuperare dati da un server altrove?

Così bene, aggiorno la chiamata in modo che ora assomiglia a:

$.ajax({ 
    url: myServerUrl, 
    type: "GET", 
    dataType: "jsonp", // considered a cross domain Ajax request if not specified 
    username: myUsername, 
    password: myPassword, 

    success: function(result) 
    { 
     // success handling 
    }, 
    error: function(req, status, errThrown){ 
     // error handling 
    } 
}) 

Perché ho bisogno di utilizzare l'autenticazione di base, che sto passando il nome utente/password, ma se a monitorare la richiesta, ho don vediamo che viene impostato e inoltre, il server invia una risposta di errore poiché non ha le informazioni previste.

Inoltre, poiché ho jsonp impostato, beforeSend non verrà richiamato.

Come si passano le credenziali utilizzando l'autenticazione di base per questa richiesta?

risposta

12

La versione breve non è possibile farlo. I tuoi sospetti sono corretti, perché sei locale e questi file sono remoti, non puoi accedervi, sei bloccato dal same-origin policy. Il work-around per questo è JSONP, ma questo non sembra applicarsi alla tua situazione ...

JSONP funziona in modo diverso, è una richiesta GET tramite un tag <script> includere per ottenere il file, quindi sei non inviare intestazioni speciali o altro.

È necessario eseguire il proxy della richiesta tramite il server attivo (il dominio di dove è in esecuzione questo script) o un'altra opzione proxy, ma il passaggio dal client a un altro dominio è bloccato, principalmente per motivi di sicurezza.

+5

Questa è la risposta corretta, JSONP non può contenere le intestazioni USER/PWD richieste da Basic Auth. Quindi sei dannato se lo fai e dannazione se non lo fai :) –

0

Penso che dovrai aggiungere un proxy server di qualche tipo. JSONP è solo un modo particolare di usare un tag script. Pertanto, non consente l'impostazione di intestazioni arbitrarie. E, naturalmente, non è possibile eseguire un XHR di origine incrociata.

7

Provare a fare http://user:[email protected]. Questo imita una richiesta di autorizzazione di base.

+2

questo sembra funzionare, ma solo per alcuni browser. – jhanifen

+1

L'utilizzo di questa sintassi verrà bloccato in Chrom dalla build M59: https://www.chromestatus.com/feature/5669008342777856 – Beejamin