Tester CORS
Gli errori CORS sono il rosso “classico” della console del browser: colpisci un’API da un’origine diversa e il browser blocca la risposta. Questo tester invia una richiesta OPTIONS preflight a qualsiasi URL che incolli, con l’origine e il metodo scelti, quindi decodifica le intestazioni Access-Control-* in modo da vedere esattamente cosa il server consente, cosa blocca e perché il browser si lamenta.
Come testare CORS
-
1
Inserisci l'URL di destinazione
L'endpoint API che desideri chiamare dal tuo front-end. Includi la stringa di query e il protocollo.
-
2
Imposta il metodo e l'origine
GET/POST/PUT/DELETE/PATCH. L'origine può essere l'URL del tuo sito o qualsiasi origine tu voglia simulare.
-
3
Comprendi il preflight
Il tester invia sempre una richiesta OPTIONS con l'origine e il metodo scelti, più l'intestazione Access-Control-Request-Headers: Content-Type, esattamente il preflight che un browser invia prima di una richiesta JSON.
-
4
Esegui il test
Il tester invia il preflight e riporta lo stato HTTP più le intestazioni di risposta CORS: Allow-Origin, Allow-Methods, Allow-Headers, Allow-Credentials e Max-Age.
-
5
Correggi la configurazione errata
Il rapporto segnala cosa manca o è errato, mancante Allow-Origin, intestazione vietata, metodo non consentito.
Le intestazioni che contano
| Intestazione | Cosa fa |
|---|---|
| Access-Control-Allow-Origin | Quali origini possono leggere la risposta |
| Access-Control-Allow-Methods | Preflight: quali metodi sono consentiti |
| Access-Control-Allow-Headers | Preflight: quali intestazioni di richiesta sono consentite |
| Access-Control-Allow-Credentials | Se i cookie/l’autenticazione sono consentiti |
| Access-Control-Expose-Headers | Quali intestazioni di risposta JS può leggere |
| Access-Control-Max-Age | Quanto a lungo il risultato del preflight è memorizzato |
Richieste semplici vs. preflightate
Una richiesta è “semplice” (senza preflight) solo se tutte queste condizioni sono vere:
- Il metodo è GET, HEAD o POST.
- Le intestazioni sono limitate a Accept, Accept-Language, Content-Language, Content-Type (con valori specifici).
- Content-Type, se presente, è application/x-www-form-urlencoded, multipart/form-data o text/plain.
Qualsiasi altra cosa, un corpo JSON, un’intestazione Authorization, un’intestazione personalizzata X-Foo, un PUT/DELETE/PATCH, attiva un preflight OPTIONS. I server devono rispondere al preflight con le giuste intestazioni Allow-* o la richiesta reale non viene mai inviata.
Fallimenti CORS comuni
- “Nessuna intestazione Access-Control-Allow-Origin” → il server non imposta l’intestazione. Correggi sul server, non sul client.
- “La modalità credenziali richiede che Allow-Origin non sia *” → se invii cookie,
Allow-Origindeve essere un’origine specifica (o ripetere l’intestazione Origin). - “Intestazione di richiesta X non consentita” → aggiungi X a
Access-Control-Allow-Headersnella risposta preflight. - “Metodo non consentito” → aggiungi il metodo a
Access-Control-Allow-Methods. - “Reindirizzamento non consentito nel preflight” → il preflight non può seguire i reindirizzamenti. L’endpoint OPTIONS deve rispondere direttamente.
Allow-Origin: * vs. ripetere Origin
Access-Control-Allow-Origin: * è permissivo ma non può essere combinato con credenziali. In produzione, ripeti l’Origin della richiesta (dopo averlo convalidato contro una lista di autorizzazione) e imposta Allow-Credentials: true se hai bisogno di cookie.
Proxy come soluzione alternativa
Se non puoi controllare il server, un proxy leggero sul tuo dominio rimuove completamente CORS, il browser vede lo stesso origine. Molte piattaforme di hosting (Vercel, Netlify, Cloudflare) offrono regole di riscrittura proprio per questo.
Domande frequenti
Per prevenire che una pagina malevola legga dati privati su un altro sito utilizzando i cookie del tuo browser. Senza CORS, visitare evil.com potrebbe consentirgli di richiedere l’API interna della tua banca come te. CORS costringe la banca a consentire esplicitamente le letture cross-origin.
Solo in sviluppo. Chromium ha un flag --disable-web-security ma influisce su tutti i siti ed è pericoloso. La correzione corretta è intestazioni lato server o un proxy.
Postman non è un browser, ignora completamente CORS. CORS è applicato solo dai browser per le richieste JavaScript. Un server che funziona in Postman non è automaticamente corretto per CORS.
Le immagini e i classici tag <script> vengono caricati cross-origin senza CORS, ma JS non può leggere i loro contenuti. <img crossorigin> e fetch() applicano CORS, motivo per cui le immagini disegnate su canvas diventano “contaminate” senza di esso.
Strumenti correlati
Ricerca Indirizzo IP
Cerca un indirizzo IPv4 o IPv6 pubblico per paese, regione, città, coordinate, ISP, ASN, organizzazione e fuso orario approssimativi.
Qual è il mio IP
Visualizza l’indirizzo IP ricevuto da questo server per la richiesta, se è IPv4 o IPv6 e, quando i dati GeoIP locali sono disponibili, un paese approssimativo.
Test di velocità
Esegui un test di velocità Internet rapido, gratuito e dal browser. Misura la velocità di download in Mbps, oltre a latenza e jitter, e scopri se la tua connessione è pronta per streaming 4K, gaming e videochiamate. Senza app e senza registrazione.
Ricerca WHOIS
Cerca i dati WHOIS pubblici di un dominio: registrar, nameserver, codici di stato e date di scadenza.
Analizzatore di header email
Analizza gli header email grezzi nel browser. Esamina i passaggi Received, i tempi e i dati SPF, DKIM, DMARC e ARC senza caricare il messaggio.
Ricerca DNS
Interroga i record DNS A, AAAA, MX, TXT, NS, CNAME e SOA di qualsiasi dominio senza aprire un terminale.