Errori CORS
Questo articolo fornisce una breve descrizione relativa agli errori CORS (Cross-Reference Origin Sharing) che possono apparire nelle tue richieste tramite le applicazioni.
Cos'è CORS?
CORS è uno standard che consente interazioni con risorse di diversa origine. Basato sulla policy della stessa origine (meccanismo di sicurezza) per impedire che un documento o uno script caricato da un'origine possa interagire con risorse di un'altra origine. Se il CORS non è configurato è possibile visualizzare l'errore sul browser della console che indica che la richiesta è stato bloccato:"Richiesta Cross-Origin bloccata:la stessa politica di origine non consente la lettura della risorsa remota su $somesite ”.
Quando so se le richieste provengono dalla stessa origine? È semplice se i due URL hanno lo stesso protocollo, host e porta. Questo è un esempio di conformità con la same-origin-policy https://localhost:80/index.html richiedere i dati a https://localhost:80/api/user/75214Questo è un esempio di non conformità con la same-origin-policy https://localhost:80/index.html richiedere i dati a https://example.com:80/api/user/75214
Che tipo di errori potrebbero apparire?
Quando sulla console viene visualizzato un errore CORS, una parte del testo è un motivo messaggio che indica cosa è andato storto. L'elenco seguente descrive gli errori CORS più comuni:
-
CORS DISABILITATO
Motivo:è stata tentata una richiesta ma CORS è disabilitato sul browser. Soluzione:è necessario accedere al browser delle impostazioni e impostare l'opzione content.cors.disable false. -
Richiesta CORS non riuscita
Motivo:una richiesta HTTP non riesce a livello di rete o di protocollo. In alcuni casi è causato da un plug-in o un'estensione o perché la seconda origine ha un certificato non valido. Soluzione:riprovare la richiesta e disabilitare i plug-in e le estensioni. Controlla se la seconda origine è disponibile e ha un certificato valido. -
Impossibile aggiungere l'intestazione CORS 'Origin'
Motivo:il browser Web non può aggiungere l'intestazione di origine richiesta alla richiesta HTTP. Soluzione:verificare se lo script non è in esecuzione con privilegi avanzati. -
Richiesta CORS reindirizzamento esterno non consentito
Motivo:la richiesta reindirizza a un'altra origine (non l'originale).Soluzione:aggiorna l'URL sul codice del tuo server. -
Richiesta CORS non HTTP
Motivo:la richiesta non viene reindirizzata a un URL HTTP valido, ad esempio file:///URL.Soluzione:verifica l'URL nel codice del tuo server. -
Intestazione CORS "Access-Control-Allow-Origin" mancante
Motivo:nella risposta manca il Access-Control-Allow-Origin header.Solution:aggiungi l'origine all'intestazione della richiesta. Access-Control-Allow-Origin:https://rackspace.com oppure puoi usare * per consentire l'accesso da qualsiasi sito. -
L'intestazione CORS "Access-Control-Allow-Origin" non corrisponde a "xyz"
Motivo:la risposta include più di un Access-Control-Allow-Origin .Soluzione:assicurati che la richiesta CORS sia configurata per includere la tua origine nella sua Access-Control-Allow-Origin header e ha solo un Access-Control-Allow-Origin intestazione. -
Le credenziali non sono supportate se l'intestazione CORS 'Access-Control-Allow-Origin' è '*'
Motivo:la richiesta CORS è stata tentata con il flag delle credenziali impostato, ma il server è configurato utilizzando il carattere jolly ("*") come valore di Access-Control-Allow-Origin, che non consente l'utilizzo delle credenziali. Soluzione:Assicurarsi che il valore del flag delle credenziali sia false quando si invia la richiesta CORS.XMLHttpRequest impostando il valore di withCredentials su false. Gli eventi inviati dal server assicurarsi che EventSource.withCredentials sia false (è il valore predefinito). Se si utilizza l'API Fetch, assicurarsi che Request .credentials è "ometti". -
Metodo non trovato nell'intestazione CORS 'Access-Control-Allow-Methods'
Motivo:il metodo della richiesta HTTP non è incluso nell'elenco di Access-Control-Allow-Methods intestazione.
Soluzione:configura l'intestazione con i metodi necessari:Access-Control-Allow-Methods:GET,HEAD,POST -
Previsto "true" nell'intestazione CORS "Access-Control-Allow-Credentials"
Motivo:quando le Access-Control-Allow-Credentials del server il valore dell'intestazione non è impostato su true per consentirne l'uso.Soluzione:sul lato client, rivedere la configurazione seguente:XMLHttpRequest impostando il valore di withCredentials su false.Gli eventi inviati dal server assicurano che EventSource.withCredentials sia false (è il valore predefinito). Se utilizzi l'API Fetch, assicurati che Request.credentials sia "omit". Per eliminare questo errore sul lato server, imposta Access-Control-Allow-Credentials valore a vero. -
Il canale di verifica preliminare CORS non è riuscito
Motivo:la richiesta CORS richiede e non è stato possibile eseguire il preflight e il preflight. Una richiesta tra siti ha già effettuato un preflight. La richiesta di verifica preliminare ha subito un errore di rete. Soluzione:verifica che il tuo codice sia sottoposto a verifica preliminare una sola volta per connessione. -
Token "xyz" non valido nell'intestazione CORS "Access-Control-Allow-Methods"
Motivo:si verifica quando la risposta al CORS include Access-Control-Allow-Methods e almeno uno è un metodo di intestazione non valido. Soluzione:verifica che tutti i metodi in Access-Control-Allow-Methods sono metodi HTTP validi. -
token "xyz" non valido nell'intestazione CORS "Access-Control-Allow-Headers"
Motivo:si verifica quando la risposta al CORS include Access-Control-Allow-Methods e almeno uno è un nome di intestazione non valido. Soluzione:verifica che tutti i nomi di intestazione in Access-Control-Allow-Headers non sono validi o sconosciuti. -
Token 'xyz' mancante nell'intestazione CORS 'Access-Control-Allow-Headers ' dal canale di preflight CORS
Motivo:questo errore si verifica quando si tenta di eseguire il preflight di un'intestazione che non è inclusa nell'elenco specificato da Access-Control-Allow-Headers header.Solution:il server deve essere aggiornato in modo che consenta l'intestazione indicata o la eviti. -
Intestazione CORS multipla "Access-Control-Allow-Origin" non consentita
Motivo:più di un Access-Control-Allow-Origin l'intestazione è stata inviata dal server.Soluzione:verifica nel tuo server che non puoi inviare un elenco di origini perché i browser accettano solo un'origine singola o nulla.
Conclusioni
Questo articolo mostra i diversi tipi di errori e le possibili soluzioni che puoi ottenere utilizzando CORS all'interno del tuo server web.