2012-03-04 18 views
38

Sto provando a inviare un dominio di origine incrociata e aggiungendo un'intestazione personalizzata 'Autorizzazione'. Si prega di consultare il codice qui sotto.intestazione 'Autorizzazione' cross-origine con jquery.ajax()

Errore:

XMLHttpRequest non è possibile caricare {url}. Campo di intestazione della richiesta L'autorizzazione non è consentita da Access-Control-Allow-Headers.

function loadJson(from, to) { 
    $.ajax({ 
     //this is a 'cross-origin' domain 
     url : "http://localhost:2180/api/index.php", 
     dataType : 'json', 
     data : { handler : "statistic", from : from, to : to 
     }, 
     beforeSend : setHeader, 
     success : function(data) { 
      alert("success"); 
     }, 
     error : function(jqXHR, textStatus, errorThrown) { 
      alert("error"); 
     } 
    }); 
} 

function getToken() { 
    var cookie = Cookie.getCookie(cookieName); 
    var auth = jQuery.parseJSON(cookie); 
    var token = "Token " + auth.id + ":" + auth.key; 
} 

function setHeader(xhr) { 
    xhr.setRequestHeader('Authorization', getToken()); 
} 

Ho anche provato:

headers : { 'Authorization' : getToken() }, 

nella richiesta Ajax.

Potrebbe essere che il framework jquery-ajax blocchi l'autenticazione incrociata? Come posso risolvere questo?

Aggiornamento:

A proposito: c'è un metodo più sicuro per memorizzare l'auth.key sul lato client poi in un cookie? getToken() verrà sostituito con un metodo più complesso, hashing del corpo, data, ecc.

+1

Il metodo 'getToken()' non restituisce nulla. – istepaniuk

risposta

61

Questo è un esempio di creazione di una richiesta CORS. Se si ha accesso al server (che presumo lo si faccia poiché si tratta di una richiesta di localhost), sarà necessario aggiungere intestazioni di risposta specifiche CORS. La cosa più semplice da fare è aggiungere le seguenti intestazioni di risposta:

Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: GET, POST, PUT, DELETE 
Access-Control-Allow-Headers: Authorization 

Il server deve anche essere configurato per rispondere alle opzioni richieste HTTP. Puoi trovare ulteriori informazioni su come effettuare richieste CORS qui: http://www.html5rocks.com/en/tutorials/cors/

+3

Bene .. Ho dimenticato l'ultimo di questi tre header. Stavo solo inviando Origin e Metodi. Stupido errore. :) Sì, ho implementato OPZIONI. Buon collegamento! grazie –

+0

In base a MDN, l'intestazione Access-Control-Allow-Origin dovrà essere impostata sull'origine quando si utilizzano richieste credenziali anziché il carattere jolly. – radicalmatt

+0

@radicalmatt, Yea, lo ha scritto anche lì http://stackoverflow.com/a/15254158/632951: * "Il valore' * 'non può essere utilizzato per l'intestazione Access-Control-Allow-Origin quando Access-Control- Permetti-Le credenziali sono vere "* – Pacerier

Problemi correlati