CORS
CORS (Cross-origin resource sharing, ve volném překladu sdílené zdroje odjinud) je v informatice mechanismus umožňující sdílení zdrojů (např. fontů, JavaScriptového kódu, atd.) webové stránky pro aplikaci na jiné doméně. Toto je zejména použito při AJAX požadavcích pomocí XMLHttpRequestu. Mezi-doménové volání by jinak bylo zakázáno webovým prohlížečem kvůli omezení same-origin policy. CORS definuje způsob, pomocí kterého se prohlížeč a dotazovaný server dohodnou na tom, zda mezi-doménové volání bude povoleno. Takto lze docílit sdílení zdrojů a zároveň zachovat bezpečnost aplikace.

Jak to funguje 
CORS přidává nové HTTP hlavičky, které předávají instrukce klientovi. Webové prohlížeče tyto hlavičky akceptují a respektují jejich omezení, která stanovují. Pokud požadavky na server mohou nějak změnit poskytovaná data (jiné metody než GET), specifikace nařizuje, aby prohlížeč nejprve provedl přípravný požadavek pomocí metody OPTIONS. Tímto požadavkem je ověřeno, zda je metoda hlavního požadavku a zdrojová doména povolena. Poté již následuje samotný požadavek na server. Server také podle standardu může oznámit klientovi, že povoluje příjem, tzv. credentials (cookies, HTTP autentizačních dat, SSL certifikátů…).

Nevýhody 
CORS znemožňuje z lokálně prohlížené stránky načíst obsah lokálního souboru, např. metodou fetch, což znemožňuje tvořit lokální aplikace běžící ve webovém prohlížeči a je nutné pro ně instalovat lokální server.

Zjednodušený příklad 
Pro inicializaci mezi-doménového požadavku prohlížeč přidá do požadavku novou hlavičku Origin. Tato hlavička nese název domény, která vytváří požadavek. Například webová stránka http://www.mojestranka.cz se pokusí získat zdroje z webu http://www.cizistranka.cz. Pokud prohlížeč má podporu CORS, obsah hlavičky ORIGIN v požadavku odesílaného na cizistranka.cz bude:

  Origin: http://www.mojestranka.cz

Pokud cizistranka.cz povolí požadavek, v odpovědi pošle ACAO hlavičku Access-Control-Allow-Origin. V této hlavičce budou uvedeny domény, ze které jsou požadavky povoleny, například:

  Access-Control-Allow-Origin: http://www.mojestranka.cz

Pokud server nepodporuje mezidoménový požadavek, prohlížeč vyhodí chybu požadavku místo navrácení odpovědi.

Při povolení požadavků ze všech domén server vrací takovouto hlavičku:

  Access-Control-Allow-Origin: *

Toto nastavení však není vhodné pro všechny typy webových stránek. Je vhodné zejména pro API webových stránek, která mají být veřejná a volně dostupná, například jako Google Fonts.

Na druhou stranu je toto nastavení vhodné pro stránky, které využívají object-capability model, kde jednotlivé funkce mají neuhádnutelné/zašifrované URL a mají být dostupné pouze pro ty, kteří je znají.

Hodnota *, je speciální a nepovoluje aby požadavek obsahoval credentials.

Podpora prohlížečů 
CORS je podporována ve všech prohlížečích založených na následujících jádrech:
 Gecko 1.9.1 (Firefox 3.5, SeaMonkey 2.0, Camino 2.1 ) a vyšší.
 WebKit (Číslo verze, od které je podporováno není jisté, Safari 4 a vyšší, Google Chrome 3 a vyšší, možná i v předchozích verzích)
 MSHTML/Trident 6.0 (Internet Explorer 10) má nativní podporu. MSHTML/Trident 4.0 & 5.0 (Internet Explorer 8 & 9) poskytuje částečnou podporu pomocí XDomainRequest objektu.
 Prohlížeče s jádrem Presto(Opera) implementují CORS od Opery 12.00 a Opera Mobile 12, ale již ne v Opera Mini.

Následující prohlížeče nemají podporu CORS
 Camino nemá podporu ve verzích 2.0.x, protože jsou založené na jádře Gecko 1.9.0.
 Ve verzi 0.10.2 prohlížeče Arora implementuje CORS, ale při pokusu o mezidoménový požadavek dojde k chybě.

CORS a JSONP 
CORS může být použito jako moderní alternativa k JSONP vzoru. Zatímco JSONP podporuje pouze požadavky metodou GET, CORS podporuje i ostatní metody HTTP. Použití CORS tak programátorovi umožňuje použit standardní XMLHttpRequest, který podporuje lepší řízení požadavku nežli JSONP. Na druhou stranu JSONP funguje na starších prohlížečích, které ještě nemají podporu CORS. Avšak tento standard je již dnes podporován ve všech moderních prohlížečích. Nevýhodou JSONP je zranitelnost přes cross-site scripting (XSS) útoky, zatímco CORS umožňuje parsování příchozího požadavku a tak zaručí bezpečnost.

Související články 
 JSONP
 Cross-document messaging

Reference

Externí odkazy 
 W3C standard
 Jak používat CORS
 Povolení cross-origin resource sharing
 HTML5 Rocks vysvětluje jak CORS funguje
 Test podpory CORS

Standardy W3C
HTTP