Curious TechieDev Toolbox
Tutte le Guide/Standard Web9 min read

Cos’è il CORS e la Same-Origin Policy (SOP)?

Comprendi il Cross-Origin Resource Sharing: richieste preflight OPTIONS, intestazioni di risposta ed eliminazione degli errori CORS.

Punti Chiave
  • La Same-Origin Policy (SOP) impedisce a script di leggere dati provenienti da origini differenti per schema, host o porta.
  • Il CORS consente ai server di dichiarare quali origini esterne possono accedere alle proprie risorse HTTP.
  • La richiesta preflight OPTIONS accerta la validità di metodi e header prima dell’invio effettivo.
  • Il carattere jolly Access-Control-Allow-Origin: * viene bloccato dal browser se sono presenti credenziali o cookie.
  • Il CORS è applicato rigidamente dai browser client, non dalle chiamate backend dirette.

1. Cos’è la Same-Origin Policy (SOP)?

La Same-Origin Policy (SOP) è la barriera di sicurezza del browser progettata per isolare contesti non attendibili. In base alla SOP, il codice su https://banca.it non può leggere cookie o risposte da https://malevolo.it.

Due URL hanno la stessa origine se e solo se Protocollo, Host (Dominio) e Porta sono identici:

https://api.example.com:443 vs https://example.com:443CROSS-ORIGIN (Sottodominio divergente)
http://example.com:80 vs https://example.com:443CROSS-ORIGIN (Protocollo divergente: HTTP vs HTTPS)
https://example.com/app vs https://example.com/apiSTESSA ORIGINE (Percorsi diversi consentiti)

2. In che Modo CORS Consente l’Accesso Cross-Origin Sicuro

Il CORS (Cross-Origin Resource Sharing) consente ai server di dichiarare tramite header HTTP quali origini terze possono leggere i propri dati:

  • Access-Control-Allow-Origin: Specifica le origini consentite (es.: https://app.curious-techie.com).
  • Access-Control-Allow-Methods: Metodi HTTP permessi (es.: GET, POST, PUT, DELETE).
  • Access-Control-Allow-Headers: Header di richiesta ammessi (es.: Content-Type, Authorization).
  • Access-Control-Max-Age: Durata (in secondi) della cache del preflight OPTIONS.

3. Richieste Preflight OPTIONS e Caching

Per richieste complesse (invio di JSON con application/json o header Authorization), il browser invia automaticamente una richiesta preliminare HTTP OPTIONS preflight per verificare i permessi.

4. La Trappola di Credenziali e Wildcard (*)

Un errore comune durante la condivisione di sessioni autenticate tra origini:

Combinazione Non Valida da Specifica: Access-Control-Allow-Origin: * + Access-Control-Allow-Credentials: true

I browser bloccano categoricamente le risposte se il wildcard * è impiegato con credenziali attive. Il server deve restituire l’header Origin specifico del chiamante previa convalida.