2012-08-13 14 views
13

Sto tentando di fornire una risposta al metodo HTTP OPTIONS con un'intestazione Access-Control-Allow-Origin che copia i contenuti dell'intestazione Origin nella richiesta.L'intestazione Access-Control-Allow-Origin non funziona - Che cosa sto facendo male?

Questo apparentemente non funziona, per ragioni che non riesco a capire.

tl; dr: risposta da OPZIONI dice:

Access-Control-Allow-Origin: http://10.0.0.105:9294 

successiva GET ha:

Origin:http://10.0.0.105:9294 

Chrome dice:

Origin http://10.0.0.105:9294 is not allowed by Access-Control-Allow-Origin 

non WTF?

dettaglio in più ...

Osservando nella finestra di strumenti per sviluppatori di Chrome, le intestazioni di richiesta sono:

OPTIONS /user/kris HTTP/1.1 
Host: 10.0.0.104:8080 
Connection: keep-alive 
Access-Control-Request-Method: GET 
Origin: http://10.0.0.105:9294 
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.75 Safari/537.1 
Access-Control-Request-Headers: origin, x-requested-with, content-type, accept 
Accept: */* 
Referer: http://10.0.0.105:9294/ 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 

Le intestazioni di risposta sono:

HTTP/1.0 200 OK 
Date: Mon, 13 Aug 2012 11:23:45 GMT 
Server: WSGIServer/0.1 Python/2.7.3 
Content-Length: 0 
Access-Control-Allow-Methods: GET, PUT, POST, DELETE, HEAD, OPTIONS 
Access-Control-Max-Age: 10 
Access-Control-Allow-Origin: http://10.0.0.105:9294 
Access-Control-Allow-Headers: X-Requested-With, Authorization, X-Huzu-User, Content-Type, Accept 
Content-Type: text/html; charset=UTF-8 

Dopo jQuery invia la sua OPTIONS richiede e ottiene la risposta di cui sopra, 2 cose strane accadono. La risposta OPTIONS (che è un 200) si presenta nella console sviluppatore come un errore:

OPTIONS http://10.0.0.104:8080/user/kris 200 (OK) 

Dopo che una richiesta GET viene rifiutata. Errore nella console:

XMLHttpRequest cannot load http://10.0.0.104:8080/user/kris. Origin http://10.0.0.105:9294 is not allowed by Access-Control-Allow-Origin. 

Non riesco a vedere perché no. Che cosa sto facendo di sbagliato?

+0

Non ho un minimo errore nel codice jQuery che sarebbe utile per postare qui. Supponiamo che non ci sia nulla di strano nel codice javascript, cioè è solo un singolo jQuery get(), risultante nella richiesta OPTIONS pubblicata sopra. La mia domanda è: cosa c'è di sbagliato nella risposta? – scav

+0

Sono solo io o c'è una differenza tra l'url dell'host (10.0.0.104:8080) e l'URL di riferimento (10.0.0.105:9294/)? – rene

+0

@rene sì. Il mio server è un'app wsgi Python in esecuzione sul mio computer locale (10.0.0.104:8080) e il test cross-site sta accadendo da una pagina che sto caricando da 10.0.0.105:9294.Non so quale effetto ha il referente sul controllo degli accessi. Pensi che sia rilevante? Se sì, cosa devo fare con questo? – scav

risposta

20

OK, penso di averlo capito. Sembra che sia necessaria la corretta gestione della richiesta OPZIONI pre-volo, ma NON SUFFICIENTE per le richieste di risorse tra siti per funzionare.

Dopo la richiesta OPTIONS torna con intestazioni soddisfacenti, tutte le risposte a eventuali richieste successive allo stesso URL anche avere l'intestazione necessaria "Access-Control-Allow-Origin", altrimenti il ​​browser li ingoiare, e non verranno nemmeno visualizzati nella finestra del debugger.

ti assomigliare browser annullato la richiesta a causa di qualche problema nella risposta OPTIONS, ma in realtà, il browser è guardando le intestazioni di risposta dal reale richiesta e poi rifiutare.

+0

Dato che l'operazione è stata eseguita con la tua query, puoi aiutarmi in questa domanda simile ? http://stackoverflow.com/questions/11953132/no-response-obtained-while-implementing-cors –

+3

@scav Come lo hai risolto – Hunt

+0

@scav +1 Non posso ringraziarti abbastanza. Mi hai risparmiato ore di debugging! – alf

Problemi correlati