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.[1]
Descrizione
[modifica | modifica wikitesto]Una pagina web può incorporare liberamente immagini, fogli di stile, script, iframe e video da altri domini,[2] 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.[3] 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.[4] Questa specifica descrive come CORS è attualmente implementato nei browser.[5] Una precedente specifica era stata pubblicata come raccomandazione del W3C.
Funzionamento
[modifica | modifica wikitesto]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
[modifica | modifica wikitesto]Le intestazioni HTTP relative a CORS sono:
Header delle richieste
[modifica | modifica wikitesto]Origin
Access-Control-Request-Method
Access-Control-Request-Headers
Header delle risposte
[modifica | modifica wikitesto]Access-Control-Allow-Origin
Access-Control-Allow-Credentials
Access-Control-Expose-Headers
Access-Control-Max-Age
Access-Control-Allow-Methods
Access-Control-Allow-Headers
Note
[modifica | modifica wikitesto]- ^ (EN) cross-site xmlhttprequest with CORS, su Mozilla Hacks – the Web developer blog. URL consultato il 27 giugno 2022.
- ^ (EN) Same-origin policy - Web security | MDN, su developer.mozilla.org. URL consultato il 27 giugno 2022.
- ^ (EN) Nicholas C. Zakas, Cross-domain Ajax with Cross-Origin Resource Sharing, su humanwhocodes.com. URL consultato il 27 giugno 2022.
- ^ (EN) Fetch Standard, su fetch.spec.whatwg.org. URL consultato il 27 giugno 2022.
- ^ Web Application Security WG -- 16 Aug 2017, su www.w3.org, en. URL consultato il 27 giugno 2022.