Sobes.tech
Junior

Kas yra CORS?

sobes.tech AI

Atsakymas iš AI

CORS (Cross-Origin Resource Sharing) — tai mechanizmas, leidžiantis tinklalapiams prašyti išteklių iš kitos domeno, prievado ar protokolo, skirto nuo to, iš kurio įkeltas pats puslapis. Tai daroma naudojant papildomas HTTP antraštes.

Pagal numatytuosius nustatymus naršyklės taiko Same-Origin Policy (SOP), kuri draudžia skriptams, vykdomiems viename puslapyje, prieiti prie duomenų iš kitos šaltinio (domeno, prievado, protokolo). CORS švelnina šią politiką kontroliuojamu būdu, leidžiant serveriui aiškiai leisti kryžminius domenų užklausas.

Kaip veikia CORS:

  1. Paprasta užklausa: Jei užklausa atitinka tam tikrus kriterijus (pavyzdžiui, naudojama GET arba POST metodas, leidžiami tik tam tikri antraštės), naršyklė siunčia užklausą tiesiogiai su papildoma Origin antrašte, nurodančia užklausos šaltinį. Serveris, gavęs šią antraštę, gali atsakyti su Access-Control-Allow-Origin antrašte, nurodančia leidžiamą šaltinį.
  2. Preflight užklausa: Nepaprastoms užklausoms (pavyzdžiui, naudojant PUT, DELETE metodus arba su naudotojo antraštėmis), naršyklė pirmiausia siunčia išankstinę (preflight) OPTIONS užklausą. Ši užklausa klausia serverio, ar leidžiama siųsti tikslinę užklausą. Serveris atsako su antraštėmis, nurodančiomis leidžiamus metodus, antraštes ir šaltinius. Jei preflight užklausa sėkminga, naršyklė siunčia pačią užklausą.

Pagrindinės CORS antraštės:

  • Origin: Siunčiama naršyklės užklausoje, nurodo šaltinį (domeną, prievadą, protokolą), kuris inicijavo užklausą.
  • Access-Control-Allow-Origin: Siunčiama serverio atsakyme, nurodo šaltinį, kuriam leidžiama gauti atsakymą. Gali būti konkretus domenas, * (bet kuris šaltinis), arba dinamiškai sugeneruotas serverio pagal Origin antraštę.
  • Access-Control-Allow-Methods: Siunčiama serverio atsakyme į preflight užklausą, nurodo leidžiamus HTTP metodus (GET, POST, PUT, DELETE ir kt.).
  • Access-Control-Allow-Headers: Siunčiama serverio atsakyme į preflight užklausą, nurodo leidžiamas užklausos antraštes.
  • Access-Control-Allow-Credentials: Siunčiama serverio atsakyme, nurodo, ar leidžiama priimti slapukus ir kitus autentifikacijos duomenis užklausoje.

Pavyzdys serverio atsakymo antraščių, leidžiančių užklausas iš 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 yra būtinas tinkamai veiklai daugelyje tinklalapių, naudojančių kryžmines AJAX užklausas, tokias kaip API sąveika, šriftų įkėlimas, web šriftų naudojimas iš CDN ir kt. Tinkamas CORS nustatymas serveryje yra kritiškai svarbus saugumui ir funkcionalumui.