2016-02-09 8 views
5

Sto realizzando un'API JSON molto semplice in Java. In realtà è un mod di Project Zomboid che serve le coordinate dell'oggetto. Ecco come il mio gestore HTTP assomiglia:L'intestazione CORS 'Access-Control-Allow-Origin' non corrisponde ... ma lo è!

public class JSONZomboid implements HttpHandler 
{ 
    @Override 
    public void handle(HttpExchange t) throws IOException { 
     // HEADERS 
     Headers headers = t.getResponseHeaders(); 
     headers.set("Content-Type", "text/json"); 
     headers.set("Access-Control-Allow-Origin", "pzmap.crash-override.net");     
     t.sendResponseHeaders(200,0); 
     //BODY 
     OutputStream os = t.getResponseBody(); 
     os.write("{\n".getBytes()); 
      // generate JSON here 
     os.write("}".getBytes()); 
     os.close(); 
    } 
} 

voglio caricare questo in progetto di mappa del progetto Zomboid utilizzando userscript che significa che ho bisogno di consentire CORS per la connessione. Questo viene fatto tramite il codice semplice:

PlayerRenderer.prototype.fetchInfo = function() { 
    $.get("http://127.0.0.1:8000/test", {}, this.displayPoints.bind(this)); 
} 

ma ottengo questo errore:

warning http://images.michaelsync.net/images/2007/09/warningicon.png Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://127.0.0.1:8000/test . (Reason: CORS header 'Access-Control-Allow-Origin' does not match 'pzmap.crash-override.net').

Anche nella console che può vedere chiaramente l'errore è fuorviante:

image description

Se Non odiavo già CORS, comincerei a odiarlo ora. Puoi dirmi qual è la stringa effettiva che appartiene all'intestazione di origine del permesso?

+2

L'intestazione deve avere il nome host del sito a cui è consentito l'accesso al contenuto. Se stai caricando le tue pagine da un sito ospitato su "pzmap.crash-override.net" allora dovrebbe funzionare. L'errore ti dice cosa contiene l'intestazione, non come era il dominio di origine. – Pointy

+1

Puoi vedere quale sito sto caricando nelle intestazioni delle richieste ('Origin' e' Referer'). –

+0

In realtà è molto difficile vedere i dettagli di quelle immagini su un piccolo schermo:/ – Pointy

risposta

1

Il commento di cui sopra # 1 è corretto: CORS ha bisogno l'intestazione Access-Control-Allow-Origin essere corrispondere a ciò richiesta originale del client è stato (per un'esperienza SSL end-to-end). Quindi, in questo caso, assicurati di impostare pzmap.crash-override.net nelle intestazioni Access-Control-Allow-Origin.

Due note:

1- Nonostante quello che si può leggere online, nginx attualmente richiede più voci per essere incluso come linee separate, a la: add_header Access-Control-Allow-Origin "https://developers.google.com"; add_header Access-Control-Allow-Origin "https://imasdk.googleapis.com";

2 - Anche nonostante ciò che si può leggere online, l'utilizzo di un carattere jolly non è corretto. Non tutti i client (ovvero i browser) lo consentono.

Problemi correlati