Sobes.tech
Junior

Cos'è CORS?

sobes.tech AI

Risposta dell'AI

CORS (Cross-Origin Resource Sharing) — è un meccanismo che consente alle pagine web di richiedere risorse da un altro dominio, porta o protocollo diverso da quello da cui è stata caricata la pagina stessa. Questo avviene tramite intestazioni HTTP aggiuntive.

Per impostazione predefinita, i browser applicano la politica Same-Origin Policy (SOP), che vieta agli script eseguiti su una pagina di accedere ai dati di un'altra origine (dominio, porta, protocollo). CORS allenta questa politica in modo controllato, consentendo al server di autorizzare esplicitamente le richieste tra domini.

Come funziona CORS:

  1. Richiesta semplice: Se la richiesta soddisfa determinati criteri (ad esempio, metodo GET o POST, intestazioni consentite), il browser invia la richiesta direttamente con un'intestazione aggiuntiva Origin che indica la fonte della richiesta. Il server, ricevendo questa intestazione, può rispondere con Access-Control-Allow-Origin che indica la fonte consentita.
  2. Preflight: Per richieste "non semplici" (ad esempio, usando metodi PUT, DELETE, o con intestazioni personalizzate), il browser invia prima una richiesta preliminare (OPTIONS). Questa domanda al server se la richiesta principale è consentita. Il server risponde con intestazioni che indicano i metodi, le intestazioni e le fonti consentite. Se il preflight ha successo, il browser invia la richiesta effettiva.

Intestazioni principali di CORS:

  • Origin: Inviato dal browser nella richiesta, indica la fonte (dominio, porta, protocollo) della pagina che effettua la richiesta.
  • Access-Control-Allow-Origin: Inviato dal server nella risposta, indica la fonte che può ricevere la risposta. Può essere un dominio specifico, * (qualsiasi fonte), o generato dinamicamente in base all'intestazione Origin.
  • Access-Control-Allow-Methods: Inviato dal server in risposta al preflight, indica i metodi HTTP consentiti (GET, POST, PUT, DELETE, ecc.).
  • Access-Control-Allow-Headers: Inviato dal server in risposta al preflight, indica le intestazioni consentite nella richiesta.
  • Access-Control-Allow-Credentials: Inviato dal server nella risposta, indica se i cookie e altre credenziali sono consentiti nella richiesta.

Esempio di intestazioni di risposta del server che consentono richieste da https://example.com:

Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Content-Type, Authorization

CORS è necessario per il corretto funzionamento di molte applicazioni web che utilizzano richieste AJAX tra domini, come l'interazione con API, il caricamento di font, l'uso di Web Fonts con CDN, ecc. La corretta configurazione di CORS sul server è fondamentale per la sicurezza e la funzionalità dell'applicazione.