microdot.cors — Cross-Origin Resource Sharing¶
Adaugă antetele de care un browser are nevoie pentru a permite codului JavaScript care rulează pe o origine să apeleze endpoint-urile găzduite pe cameră de pe o altă origine. Clasa se integrează în handlerul OPTIONS al aplicației (pentru cererile preflight) și în hook-ul de după cerere (pentru antetele Access-Control-* din răspunsurile normale).
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
Instanța
microdot.Microdotla care se atașează. Poate fiNonepentru a amâna atașarea; apeleazăinitialize()mai târziu.- allowed_origins
O listă de șiruri de origini (
["https://app.example.com"]) sau literalul'*'pentru a permite orice origine. Originile care nu corespund acestei liste nu primesc antete CORS, ceea ce browserul interpretează drept „această cerere nu este permisă”.- allow_credentials
Dacă este
True, adaugăAccess-Control-Allow-Credentials: trueastfel încât browserul să trimită cookie-uri și antete de autentificare cu cererile cross-origin. Nu poate fi folosit cuallowed_origins='*'pentru nicio cerere care necesită credențiale (browserele resping această combinație).- allowed_methods
Lista de metode (
['GET', 'POST']) pe care browserul le poate utiliza cross-origin.Noneînseamnă oricare.- expose_headers
Lista de nume de antete de răspuns pe care browserul le poate expune către JavaScript.
- allowed_headers
Lista de nume de antete de cerere pe care clienții le pot include cross-origin.
Noneînseamnă oricare (reflectăAccess-Control-Request-Headersdin preflight).- max_age
Numărul de secunde cât browserul poate stoca în cache rezultatul preflight. Omiterea lui înseamnă că browserul revalidează fiecare preflight.
- handle_cors
Dacă este
False, clasa este configurată, dar nu se atașează efectiv – util când dorești să combini manual ieșireaget_cors_headers()cu alt middleware.
- initialize(app: Microdot, handle_cors: bool = True)¶
Se atașează la app dacă construcția a fost amânată.
- get_cors_headers(request) dict¶
Calculează setul de antete
Access-Control-*care se aplică cererii request. Folosit intern de hook-ul de după cerere; aplicațiile îl pot apela direct atunci când emit antete CORS din middleware personalizat.
- allowed_origins: list | str | None¶
Lista configurată de origini sau literalul
'*'. Reflectă argumentul de constructor allowed_origins; reatribuie-l în timpul execuției pentru a schimba politica fără a reconstrui obiectul.
- allow_credentials: bool¶
Dacă
Access-Control-Allow-Credentials: trueeste emis pentru cererile care corespund. Reflectă argumentul de constructor allow_credentials.
- allowed_methods: list | None¶
Lista de nume de metode permise cross-origin sau
Nonepentru „oricare”. Reflectă argumentul de constructor allowed_methods.
- expose_headers: list | None¶
Lista de antete de răspuns pe care browserul le poate expune către JavaScript sau
Nonepentru a omite antetulAccess-Control-Expose-Headers. Reflectă argumentul de constructor expose_headers.
Exemplu:
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}
Cererea preflight OPTIONS este tratată automat; camera returnează antetele Access-Control-* corespunzătoare și 204 No Content. Răspunsurile efective GET / POST / etc. primesc antetul Access-Control-Allow-Origin prin hook-ul de după cerere înregistrat.