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.Microdotna koju se treba prikvačiti. Može bitiNoneza odgodu prikvačivanja; kasnije pozoviteinitialize().- 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, dodajeAccess-Control-Allow-Credentials: truekako bi preglednik slao kolačiće i auth zaglavlja s zahtjevima između izvora. Ne može se koristiti sallowed_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.Noneznač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.
Noneznači bilo koje (ponavljaAccess-Control-Request-Headersiz 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 njezineget_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: trueemitirati na podudarajućim zahtjevima. Zrcali argument konstruktora allow_credentials.
- allowed_methods: list | None¶
Lista naziva metoda dopuštenih između izvora, ili
Noneza „bilo koja”. Zrcali argument konstruktora allowed_methods.
- expose_headers: list | None¶
Lista zaglavlja odgovora koje preglednik smije izložiti JavaScriptu, ili
Noneza izostavljanje zaglavljaAccess-Control-Expose-Headers. Zrcali argument konstruktora expose_headers.
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.