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:
- 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
Originantrašte, nurodančia užklausos šaltinį. Serveris, gavęs šią antraštę, gali atsakyti suAccess-Control-Allow-Originantrašte, nurodančia leidžiamą šaltinį. - Preflight užklausa: Nepaprastoms užklausoms (pavyzdžiui, naudojant
PUT,DELETEmetodus arba su naudotojo antraštėmis), naršyklė pirmiausia siunčia išankstinę (preflight)OPTIONSuž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 pagalOriginantraš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.