Sobes.tech
Junior

Čo je CORS?

sobes.tech AI

Odpoveď od AI

CORS (Cross-Origin Resource Sharing) je mechanizmus, ktorý umožňuje webovým stránkam žiadať zdroje z iného domény, portu alebo protokole, odlišného od toho, z ktorého bola načítaná samotná stránka. To sa robí pomocou doplnkových HTTP hlavičiek.

Predvolene prehliadače uplatňujú politiku Same-Origin Policy (SOP), ktorá zakazuje skriptom bežiacim na jednej stránke prístup k údajom z iného zdroja (domény, portu, protokolu). CORS zmierňuje túto politiku kontrolovaným spôsobom, umožňujúc serveru jasne povoliť cross-domain požiadavky.

Ako CORS funguje:

  1. Jednoduchá požiadavka: Ak požiadavka spĺňa určité kritériá (napríklad používa metódu GET alebo POST, povolené sú iba určité hlavičky), prehliadač odošle požiadavku priamo s doplnkovou hlavičkou Origin, ktorá uvádza zdroj požiadavky. Server pri prijatí tejto hlavičky môže odpovedať hlavičkou Access-Control-Allow-Origin, ktorá uvádza povolený zdroj.
  2. Preflight požiadavka: Pre "nepriame" požiadavky (napríklad s použitím metód PUT, DELETE, alebo s používateľskými hlavičkami), prehliadač najskôr odošle predbežný (preflight) OPTIONS-požiadavku. Táto požiadavka sa pýta server, či je povolené odoslať cieľovú požiadavku. Server odpovedá hlavičkami, ktoré uvádzajú povolené metódy, hlavičky a zdroje. Ak je preflight požiadavka úspešná, prehliadač odošle samotnú požiadavku.

Hlavné hlavičky CORS:

  • Origin: Odosiela sa od prehliadača v požiadavke, uvádza zdroj (doménu, port, protokol) stránky, ktorá iniciovala požiadavku.
  • Access-Control-Allow-Origin: Odosiela sa od servera v odpovedi, uvádza zdroj, ktorému je povolené odpoveď prijímať. Môže byť konkrétny doménou, * (akýkoľvek zdroj), alebo dynamicky generovaný serverom na základe hlavičky Origin.
  • Access-Control-Allow-Methods: Odosiela sa od servera v odpovedi na preflight požiadavku, uvádza povolené HTTP metódy (GET, POST, PUT, DELETE a pod.).
  • Access-Control-Allow-Headers: Odosiela sa od servera v odpovedi na preflight požiadavku, uvádza povolené hlavičky požiadavky.
  • Access-Control-Allow-Credentials: Odosiela sa od servera v odpovedi, uvádza, či je povolené prijímať cookies a iné prihlasovacie údaje v požiadavke.

Príklad hlavičiek odpovede servera, povolujúcich požiadavky 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 nevyhnutný pre správnu funkčnosť mnohých webových aplikácií využívajúcich cross-origin AJAX požiadavky, ako je API komunikácia, načítanie fontov, používanie webových fontov z CDN a pod. Správne nastavenie CORS na serveri je kľúčové pre bezpečnosť a funkčnosť aplikácie.