Stiamo pubblicando una richiesta AJAX a un server che esegue a livello locale, vale a direChrome aggiungendo intestazione di origine alla richiesta stessa origine
xhr.open("POST", "http://localhost:9000/context/request");
xhr.addHeader(someCustomHeaders);
xhr.send(someData);
La pagina che viene eseguito questo javascript viene anche servito da localhost: 9000, cioè questo sembra totalmente una richiesta di origine identica.
Tuttavia, per qualche motivo, Google Chrome imposta sempre un colpo di testa di origine nella richiesta risultante, causando il nostro server per bloccare la richiesta sulla base del falso presupposto che si tratta di richiesta di CORS.
Questo non accade in Firefox.
Inoltre, né Firefox né Chrome inviano una richiesta di verifica preliminare OPZIONI, il che è fonte di confusione; perché impostare un'intestazione Origin senza prima il preflight per assicurarsi che le intestazioni Origin e Custom siano consentite dal server?
Qualcuno sa cosa sta succedendo in questo caso? Stiamo fraintendendo le specifiche CORS?
Vedere http://seclab.stanford.edu/websec/csrf/csrf.ppt che risponde perché l'intestazione Origin è valida per le richieste POST di origine uguale. È un meccanismo di protezione CSRF. – user239558