2015-09-01 13 views
14

Sto lavorando a un'applicazione Web (Angular + Rails) che assegna risorse tramite CloudFront CDN. L'applicazione viene fornita anche se nginx è impostato correttamente per impostare l'intestazione "Access-Control-Allow-Origin". CloudFront è impostato per inoltrare l'intestazione.Access-Control-Allow-Origin mancante sulla prima risposta

Problema: manca l'intestazione nella prima risposta per un modello Angolare, ma è presente correttamente nelle risposte successive (se aggiorno la pagina).

Ad esempio, se si cancella tutta la cronologia e la cache in Chrome e si visita la pagina, la risposta per un file modello non avrà l'intestazione "Access-Control-Allow-Origin". Se aggiorno la pagina, la risposta per il modello avrà l'intestazione.

Ho notato che se cancello tutta la cronologia e la cache, ma non i cookie, continua a funzionare correttamente.

Si comporta in modo simile su Firefox. Se cancello tutta la cronologia e la cache non funziona sulla prima risposta, ma funziona correttamente sulle risposte successive. Dopo aver cancellato tutta la cronologia e la cache ma senza cookie, continua a funzionare correttamente, a differenza di Chrome.

Inoltre, se apro gli strumenti di sviluppo e disattivo la cache in Firefox, l'intestazione manca su ogni risposta.

Sai qual è il problema o dove dovrei cercare dopo?

Grazie.

+0

provare JSONP per richieste corsie –

+2

La prima richiesta di dominio incrociato è OPZIONI, le intestazioni del server shoud restituiscono Access-Control-Allow-Methods: POST, GET, ** OPZIONI ** –

+0

Che problema stai affrontando esattamente? Per ogni richiesta, viene effettuata prima una richiesta OPZIONI, se ciò è successo, allora viene fatta la richiesta effettiva. Sei di fronte a un problema lì o in qualsiasi altra richiesta? Ha un impatto sulla tua applicazione? –

risposta

6

"Access-Control-Allow-Origin" è un'intestazione di risposta, non un'intestazione di richiesta. Viene restituito da un server HTTP quando un client HTTP invia una richiesta con un metodo OPTION. Ad esempio, l'API ajax nei browser invia una richiesta OPTION prima di provare una richiesta POST quando l'URL target non è l'URL della pagina corrente (vedere Problema di condivisione delle risorse di origine incrociata). Questa richiesta OPTION contiene l'intestazione "Origin" che contiene l'inizio della pagina corrente dell'URL (schema + dominio). L'API Ajax invierà la richiesta POST solo se la risposta contiene l'intestazione "Access-Control-Allow-Origin" con un URL corrispondente alla pagina principale.

È necessario preoccuparsi di tali intestazioni se si desidera accedere a contenuti dinamici da un server diverso da quello che serve la pagina corrente. Non sembra il tuo caso qui.

Per ulteriori informazioni su CORS, vedi questa pagina di wikipedia: https://en.wikipedia.org/wiki/Cross-origin_resource_sharing

+0

Alla fine ho risolto questo problema utilizzando i modelli in linea con Angular, poiché ho visto che la maggioranza degli sviluppatori preferiva farlo. Tuttavia, questa risposta è stata la più utile per saperne di più su CORS. – Strika

0

Se c'è anche AngularJS tag, Mi permetto di suggerire di non caricare modelli HTML ma li compila in un unico file JS (per esempio con html2js plugin grunt)

Problemi correlati