Tester CORS

Avanti

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. 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. 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. 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. 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. 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-Origin deve essere un’origine specifica (o ripetere l’intestazione Origin).
  • “Intestazione di richiesta X non consentita” → aggiungi X a Access-Control-Allow-Headers nella 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