microdot.cors — dijeljenje resursa između izvora (Cross-Origin Resource Sharing)

Dodaje zaglavlja koja preglednik treba kako bi dopustio da JavaScript koji se izvodi na jednom izvoru poziva vaše krajnje točke smještene na kameri na drugom izvoru. Klasa se sama povezuje s aplikacijskim OPTIONS rukovateljem (za preflight zahtjeve) i s hookom nakon zahtjeva (za zaglavlja Access-Control-* na uobičajenim odgovorima).

class CORS

class microdot.cors.CORS(app: Microdot | None = None, allowed_origins=None, allow_credentials: bool = False, allowed_methods: list | None = None, expose_headers: list | None = None, allowed_headers: list | None = None, max_age: int | None = None, handle_cors: bool = True)
app

Instanca microdot.Microdot na koju se treba prikvačiti. Može biti None za odgodu prikvačivanja; kasnije pozovite initialize().

allowed_origins

Lista nizova izvora (["https://app.example.com"]) ili doslovni '*' za dopuštanje bilo kojeg izvora. Izvori koji se ne podudaraju s ovom listom ne dobivaju CORS zaglavlja, što preglednik tumači kao „ovaj zahtjev nije dopušten”.

allow_credentials

Ako je True, dodaje Access-Control-Allow-Credentials: true kako bi preglednik slao kolačiće i auth zaglavlja s zahtjevima između izvora. Ne može se koristiti s allowed_origins='*' za bilo koji zahtjev koji treba vjerodajnice (preglednici odbijaju tu kombinaciju).

allowed_methods

Lista metoda (['GET', 'POST']) koje preglednik smije koristiti između izvora. None znači bilo koja.

expose_headers

Lista naziva zaglavlja odgovora koje preglednik smije izložiti JavaScriptu.

allowed_headers

Lista naziva zaglavlja zahtjeva koje klijenti smiju uključiti između izvora. None znači bilo koje (ponavlja Access-Control-Request-Headers iz preflighta).

max_age

Sekunde tijekom kojih preglednik smije keširati rezultat preflighta. Izostavljanje znači da preglednik ponovno provjerava svaki preflight.

handle_cors

Ako je False, klasa je konfigurirana, ali se zapravo ne prikvačuje – korisno kada želite ručno kombinirati izlaz njezine get_cors_headers() s drugim međusoftverom.

initialize(app: Microdot, handle_cors: bool = True)

Prikvačuje se na app ako je konstrukcija bila odgođena.

get_cors_headers(request) dict

Izračunava skup zaglavlja Access-Control-* koja se primjenjuju na request. Interno se koristi u hooku nakon zahtjeva; aplikacije ga mogu pozvati izravno kada emitiraju CORS zaglavlja iz prilagođenog međusoftvera.

allowed_origins: list | str | None

Konfigurirana lista izvora, ili doslovni '*'. Zrcali argument konstruktora allowed_origins; preradite ga tijekom izvođenja da biste promijenili politiku bez ponovne izgradnje objekta.

allow_credentials: bool

Hoće li se Access-Control-Allow-Credentials: true emitirati na podudarajućim zahtjevima. Zrcali argument konstruktora allow_credentials.

allowed_methods: list | None

Lista naziva metoda dopuštenih između izvora, ili None za „bilo koja”. Zrcali argument konstruktora allowed_methods.

expose_headers: list | None

Lista zaglavlja odgovora koje preglednik smije izložiti JavaScriptu, ili None za izostavljanje zaglavlja Access-Control-Expose-Headers. Zrcali argument konstruktora expose_headers.

allowed_headers: list | None

Lista naziva zaglavlja zahtjeva prihvaćenih između izvora, pretvorenih u mala slova, ili None za „ponovi što god je preflight tražio”. Zrcali argument konstruktora allowed_headers (konstruktor pretvara listu u mala slova prije spremanja).

max_age: int | None

Sekunde tijekom kojih preglednik smije keširati odgovor na preflight, ili None za izostavljanje zaglavlja Access-Control-Max-Age. Zrcali argument konstruktora max_age.

Primjer:

from microdot import Microdot
from microdot.cors import CORS

app = Microdot()
CORS(app,
     allowed_origins=['https://dashboard.example.com'],
     allow_credentials=True,
     max_age=86400)

@app.get('/api/status')
async def status(request):
    return {'ok': True}

Preflight OPTIONS zahtjev obrađuje se automatski; kamera vraća odgovarajuća zaglavlja Access-Control-* i 204 No Content. Stvarni GET / POST / itd. odgovori preuzimaju zaglavlje Access-Control-Allow-Origin putem registriranog hooka nakon zahtjeva.