Cross-origin resource sharing
# Cross-origin resource sharing

CORS (acronimo di Cross-Origin Resource Sharing) è un sistema di sicurezza che consente di richiedere delle risorse da una pagina web ad un altro dominio esterno rispetto al richiedente.

## Descrizione

Una pagina web può incorporare liberamente immagini, fogli di stile, script, iframe e video da altri domini, mentre alcune richieste "interdominio", in particolare le richieste AJAX, sono bloccate per impostazione predefinita dalla politica di sicurezza per cui la risorsa richiesta debba avere la stessa origine (e quindi dallo stesso dominio) del sito richiedente. CORS definisce un modo in cui un browser e un server possano interagire per determinare se è sicuro consentire la richiesta multiorigine. Questo sistema consente maggiore libertà e funzionalità rispetto ad una forzature di richieste della stessa origine, ma al contempo stesso consente le richieste tra origini diverse.

La specifica per CORS è inclusa come parte del Fetch Living Standard del WHATWG. Questa specifica descrive come CORS è attualmente implementato nei browser. Una precedente specifica era stata pubblicata come raccomandazione del W3C.

## Funzionamento

Per i metodi di richiesta Ajax e HTTP che possono modificare i dati (di solito metodi HTTP diversi da GET o per l'utilizzo POST con determinati tipi MIME), la specifica richiede che i browser eseguano il cosiddetto "preflight" della richiesta, sollecitando i metodi supportati dal server con una richiesta HTTP OPTIONS e quindi, su "approvazione" dal server, inviando la richiesta effettiva con il metodo di richiesta HTTP effettivo.

## Intestazioni HTTP

Le intestazioni HTTP relative a CORS sono:

### Header delle richieste

* Origin
* Access-Control-Request-Method
* Access-Control-Request-Headers

### Header delle risposte

* Access-Control-Allow-Origin
* Access-Control-Allow-Credentials
* Access-Control-Expose-Headers
* Access-Control-Max-Age
* Access-Control-Allow-Methods
* Access-Control-Allow-Headers
