Sobes.tech
Junior

Co je CORS?

sobes.tech AI

Odpověď od AI

CORS (Cross-Origin Resource Sharing) — je mechanismus, který umožňuje webovým stránkám žádat zdroje z jiného domény, portu nebo protokolu, než ze kterého byla načtena samotná stránka. To se provádí pomocí doplňkových HTTP hlaviček.

Ve výchozím nastavení používají prohlížeče politiku Same-Origin Policy (SOP), která zakazuje skriptům běžícím na jedné stránce přístup k datům z jiného zdroje (domény, portu, protokolu). CORS tuto politiku zmírňuje kontrolovaným způsobem tím, že serveru umožňuje explicitně povolit cross-domain požadavky.

Jak CORS funguje:

  1. Jednoduchý požadavek: Pokud požadavek splňuje určité kritéria (například používá metodu GET nebo POST, jsou povoleny pouze určité hlavičky), prohlížeč odešle požadavek přímo s doplňkovou hlavičkou Origin, která uvádí zdroj požadavku. Server při obdržení této hlavičky může odpovědět hlavičkou Access-Control-Allow-Origin, která uvádí povolený zdroj.
  2. Preflight požadavek: Pro "nepřímé" požadavky (například s použitím metod PUT, DELETE, nebo s uživatelskými hlavičkami) prohlížeč nejprve odešle předběžný (preflight) OPTIONS-požadavek. Tento požadavek se ptá serveru, zda je povoleno odeslat cílový požadavek. Server odpovídá hlavičkami, které uvádějí povolené metody, hlavičky a zdroje. Pokud je preflight úspěšný, prohlížeč odešle samotný požadavek.

Hlavní hlavičky CORS:

  • Origin: Odesílá prohlížeč v požadavku, uvádí zdroj (doménu, port, protokol) stránky, která požadavek iniciovala.
  • Access-Control-Allow-Origin: Odesílá server v odpovědi, uvádí zdroj, kterému je povoleno odpověď přijmout. Může být konkrétní doména, * (libovolný zdroj), nebo dynamicky generováno serverem na základě hlavičky Origin.
  • Access-Control-Allow-Methods: Odesílá server v odpovědi na preflight požadavek, uvádí povolené HTTP metody (GET, POST, PUT, DELETE atd.).
  • Access-Control-Allow-Headers: Odesílá server v odpovědi na preflight požadavek, uvádí povolené hlavičky požadavku.
  • Access-Control-Allow-Credentials: Odesílá server v odpovědi, uvádí, zda je povoleno přijímat cookies a jiné přihlašovací údaje v požadavku.

Příklad hlaviček odpovědi serveru povolujících požadavky z 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 je nezbytný pro správnou funkčnost mnoha webových aplikací využívajících cross-origin AJAX požadavky, jako je API komunikace, načítání fontů, používání webových fontů z CDN apod. Správné nastavení CORS na serveru je kritické pro bezpečnost a funkčnost aplikace.