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.