microdot.cors — Cross-Origin Resource Sharing¶
Fügt die Header hinzu, die ein Browser benötigt, damit JavaScript, das auf einem Origin läuft, deine auf der Kamera gehosteten Endpunkte auf einem anderen Origin aufrufen kann. Die Klasse bindet sich in den OPTIONS-Handler der Anwendung (für Preflight-Anfragen) und in den After-Request-Hook (für die Access-Control-*-Header bei normalen Antworten) ein.
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
Die
microdot.Microdot-Instanz, an die angebunden werden soll. DarfNonesein, um die Anbindung aufzuschieben; rufe späterinitialize()auf.- allowed_origins
Eine Liste von Origin-Zeichenketten (
["https://app.example.com"]) oder das Literal'*', um jeden Origin zuzulassen. Origins, die nicht in dieser Liste enthalten sind, erhalten keine CORS-Header, was der Browser als „diese Anfrage ist nicht erlaubt“ interpretiert.- allow_credentials
Wenn
True, wirdAccess-Control-Allow-Credentials: truehinzugefügt, sodass der Browser Cookies und Auth-Header mit Cross-Origin-Anfragen sendet. Kann nicht mitallowed_origins='*'für eine Anfrage verwendet werden, die Anmeldedaten benötigt (Browser lehnen diese Kombination ab).- allowed_methods
Liste der Methoden (
['GET', 'POST']), die der Browser cross-origin verwenden darf.Nonebedeutet beliebig.- expose_headers
Liste der Namen der Antwort-Header, die der Browser für JavaScript verfügbar machen darf.
- allowed_headers
Liste der Namen der Anfrage-Header, die Clients cross-origin einschließen dürfen.
Nonebedeutet beliebig (gibt denAccess-Control-Request-Headersdes Preflights zurück).- max_age
Sekunden, die der Browser das Preflight-Ergebnis zwischenspeichern darf. Das Auslassen bedeutet, dass der Browser jeden Preflight neu validiert.
- handle_cors
Wenn
False, wird die Klasse konfiguriert, bindet sich aber nicht tatsächlich ein – nützlich, wenn du die Ausgabe vonget_cors_headers()manuell mit anderer Middleware kombinieren möchtest.
- initialize(app: Microdot, handle_cors: bool = True)¶
An app anbinden, falls die Konstruktion aufgeschoben wurde.
- get_cors_headers(request) dict¶
Berechnet die Menge der
Access-Control-*-Header, die auf request zutreffen. Wird intern vom After-Request-Hook verwendet; Anwendungen können sie direkt aufrufen, wenn sie CORS-Header aus eigener Middleware ausgeben.
- allowed_origins: list | str | None¶
Die konfigurierte Liste der Origins oder das Literal
'*'. Entspricht dem Konstruktorargument allowed_origins; neu zuweisen zur Laufzeit, um die Richtlinie zu ändern, ohne das Objekt neu aufzubauen.
- allow_credentials: bool¶
Ob
Access-Control-Allow-Credentials: truebei passenden Anfragen ausgegeben wird. Entspricht dem Konstruktorargument allow_credentials.
- allowed_methods: list | None¶
Liste der cross-origin erlaubten Methodennamen oder
Nonefür „beliebig“. Entspricht dem Konstruktorargument allowed_methods.
- expose_headers: list | None¶
Liste der Antwort-Header, die der Browser für JavaScript verfügbar machen darf, oder
None, um denAccess-Control-Expose-Headers-Header wegzulassen. Entspricht dem Konstruktorargument expose_headers.
Beispiel:
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}
Die Preflight-OPTIONS-Anfrage wird automatisch verarbeitet; die Kamera gibt die passenden Access-Control-*-Header und 204 No Content zurück. Tatsächliche GET / POST / usw. Antworten erhalten den Access-Control-Allow-Origin-Header über den registrierten After-Request-Hook.