CORS (Cross-Origin Resource Sharing) yra naršyklės saugumo mechanizmas, kuris kontroliuoja, ar žiniatinklio puslapis iš vieno origin gali kreiptis į jūsų API skirtingame origin. FastAPI ją konfigūruoja naudodama įtaisytą CORSMiddleware. Su CORS susidursite kiekvieną kartą, kai priekinė dalis skirtingame domene/prievade kreipiasi į jūsų API.
Problema, kurią CORS sprendžia
A React app at http://localhost:3000 calling an API at http://localhost:8000 is
CROSS-ORIGIN (different port). The BROWSER blocks the response unless the API
sends CORS headers permitting that origin.
(origin = scheme + host + port)
CORSMiddleware konfigūracija
from fastapi.middleware.cors import CORSMiddleware
app.add_middleware(
CORSMiddleware,
allow_origins=["https://app.example.com", "http://localhost:3000"], # ALLOWLIST of origins
allow_credentials=True, # allow cookies/auth (requires specific origins, not "*")
allow_methods=["*"], # or ["GET", "POST", ...]
allow_headers=["*"],
)
Middleware'ė prideda reikalingus CORS atsakymo antraščius, nurodydama naršyklei, kurie origin, metodai ir antraščiai yra leidžiami. Naršyklė šias taisykles įgyvendina.
Saugumas: apribokite origin (nenaudokite "*")
# ❌ allowing all origins — convenient but insecure for credentialed/private APIs
allow_origins=["*"]
# ✅ restrict to your known frontend origins (an allowlist)
allow_origins=["https://app.example.com"]
# NOTE: allow_credentials=True is INCOMPATIBLE with allow_origins=["*"]
Produkcijoje apribokite allow_origins į leistinųjų sąrašą, o ne naudokite *. Taip pat, leidimas kredencialams (slapukai/autentifikacija) reikalauja konkrečių origin — jokardinio ženklą negalima naudoti kartu su kredencialais.
Viena svarbi klaidinga samprata
CORS is enforced by the BROWSER, not the server. It does NOT protect your API from
non-browser clients (curl, Postman, other servers) — those ignore CORS entirely.
CORS only governs what browser JavaScript from other origins may do.
Kodėl tai svarbu
CORS yra vienas dažniausių žiniatinklio kūrimo kliuviųjų — beveik kiekviena priekinės dalies ir API sąveika (ypač lokalinėje plėtrojoje su skirtingais prievadais ir produkcijoje su atsiskira priekine dalimi) su juo susiduria, todėl žinojimas, kaip jį konfigūruoti naudojant FastAPI CORSMiddleware, yra praktinės, dažnai reikalingos žinios.
Supratimas, kodėl jis egzistuoja (naršyklės same-origin saugumas), kaip serveris į tai pritaria per atsakymo antraščius, ir kaip jį konfigūruoti (leidžiami origin, metodai, antraščiai, kredencialai), yra būtinas norint sujungti priekinės dalies ir FastAPI API be to, kad prašymai būtų užblokuoti.
Equally important yra jo konfigūracija saugiai — apribojant allow_origins į konkrečią leistinųjų sąrašą, o ne į permisyvų * (ir supratus, kad kredencialai yra nesuderinami su jokardžiu) — ir supratusjant kritinę klaidingą sampratą, kad CORS yra naršyklės mechanizmas, o ne API autorizacija (jis neapsaugo nuo ne-naršyklės klientų).
Žinojimas, kaip CORS tinkamai ir saugiai nustatyti, yra svarbi kasdienė žinia bet kuriam FastAPI API, naudojamam žiniatinklio priekinės dalies.
