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. Darf None sein, um die Anbindung aufzuschieben; rufe später initialize() 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, wird Access-Control-Allow-Credentials: true hinzugefügt, sodass der Browser Cookies und Auth-Header mit Cross-Origin-Anfragen sendet. Kann nicht mit allowed_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. None bedeutet 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. None bedeutet beliebig (gibt den Access-Control-Request-Headers des 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 von get_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: true bei passenden Anfragen ausgegeben wird. Entspricht dem Konstruktorargument allow_credentials.

allowed_methods: list | None

Liste der cross-origin erlaubten Methodennamen oder None fü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 den Access-Control-Expose-Headers-Header wegzulassen. Entspricht dem Konstruktorargument expose_headers.

allowed_headers: list | None

Liste der cross-origin akzeptierten Anfrage-Header-Namen, in Kleinbuchstaben, oder None für „gib zurück, was der Preflight angefragt hat“. Entspricht dem Konstruktorargument allowed_headers (der Konstruktor wandelt die Liste vor dem Speichern in Kleinbuchstaben um).

max_age: int | None

Sekunden, die der Browser die Preflight-Antwort zwischenspeichern darf, oder None, um den Access-Control-Max-Age-Header wegzulassen. Entspricht dem Konstruktorargument max_age.

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.