5

Sto provando a effettuare una chiamata API all'API GroupMe per recuperare una risposta JSON ma ho ricevuto il seguente errore:Campo intestazione richiesta X-CSRFToken non consentito da Access-Control-Allow-Headers nella risposta preflight

XMLHttpRequest cannot load ...(call url)... 
Request header field X-CSRFToken is not allowed by Access-Control-Allow-Headers in preflight response. 

mio JavaScript assomiglia a questo:

var xmlhttp = new XMLHttpRequest(); 
var url = (call url) 

xmlhttp.onreadystatechange = function() { 
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 

    xmlhttp.open("GET", url, true); 
    xmlhttp.setRequestHeader("Access-Control-Allow-Headers", "*"); 
    xmlhttp.setRequestHeader('Access-Control-Allow-Origin', '*'); 

    $.getJSON(url, function(data){ 
     var array = data.response.messages.reverse(); 
     for(i = 0; i<array.length; i++){ 
      $('.messages').append("<div class='message'>"+array[i].name+":<br>"+array[i].text+"</div>"); 
     } 
    }); 
    } 
} 

xmlhttp.open("GET", url, true); 
xmlhttp.send(); 

io non capisco come intestazioni di richiesta funzionano così sto indovinando non sto impostando correttamente le intestazioni. Qualcuno può indicarmi la giusta direzione su come impostare le intestazioni per risolvere questo problema?

+0

non è necessario fare confusione con quelle intestazioni dal client, quelle sono intestazioni di risposta del server. assicurati che il tuo server autorizzi "X-CSRFToken' in ACAH se fa parte della risposta. – dandavis

+1

oh, e noi JSers in realtà non facciamo neanche un preflight, il browser lo fa per noi e lascia che il nostro lavoro "regolare-ass" funzioni se passa ... – dandavis

risposta

5

      Se si effettua una chiamata a un server di terze parti, per la richiesta di verifica preliminare, il response header dovrebbe contenere Access-Control-Allow-Headers: X-CSRF-Token per sbarazzarsi di l'errore che si ottiene. Ma non ne abbiamo il controllo.

      E 'totalmente sotto il nostro controllo, se la chiamata viene effettuata al nostro server, dove è possibile aggiungere Access-Control-Allow-Headers: X-CSRF-Token nella risposta alla richiesta di verifica preliminare che è di tipo OPTIONS nel caso in cui se si sta inviando un ajax jQuery request con crossDomain parameter set to true .

+0

Grazie! Aggiunta di Access-Control-Allow-Headers: X-CSRF-Token, Content-Type ha fatto il trucco! – Ben

+1

Dove dovrei metterlo in asse? –