microdot.cors — Cross-Origin Resource Sharing

Voegt de headers toe die een browser nodig heeft om JavaScript dat op de ene origin draait toe te staan jouw door de camera gehoste endpoints op een andere origin aan te roepen. De klasse koppelt zichzelf in de OPTIONS-handler van de applicatie (voor preflight-verzoeken) en in de after-request-hook (voor de Access-Control-*-headers op normale antwoorden).

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

De microdot.Microdot-instantie waaraan gekoppeld moet worden. Mag None zijn om koppeling uit te stellen; roep later initialize() aan.

allowed_origins

Een lijst met origin-tekenreeksen (["https://app.example.com"]) of de letterlijke waarde '*' om elke origin toe te staan. Origins die niet in deze lijst voorkomen krijgen geen CORS-headers, wat de browser interpreteert als “dit verzoek is niet toegestaan”.

allow_credentials

Als True, voeg Access-Control-Allow-Credentials: true toe zodat de browser cookies en auth-headers meestuurt bij cross-origin-verzoeken. Kan niet gebruikt worden met allowed_origins='*' voor verzoeken die inloggegevens nodig hebben (browsers weigeren die combinatie).

allowed_methods

Lijst met methoden (['GET', 'POST']) die de browser cross-origin mag gebruiken. None betekent elke methode.

expose_headers

Lijst met namen van responseheaders die de browser zichtbaar mag maken voor JavaScript.

allowed_headers

Lijst met namen van requestheaders die clients cross-origin mogen meesturen. None betekent elke (echoot de Access-Control-Request-Headers van de preflight).

max_age

Aantal seconden dat de browser het preflight-resultaat mag cachen. Dit overslaan betekent dat de browser elke preflight opnieuw valideert.

handle_cors

Als False wordt de klasse geconfigureerd maar koppelt deze zichzelf niet daadwerkelijk – handig wanneer je de get_cors_headers()-uitvoer handmatig wilt combineren met andere middleware.

initialize(app: Microdot, handle_cors: bool = True)

Koppel aan app als de constructie was uitgesteld.

get_cors_headers(request) dict

Bereken de verzameling Access-Control-*-headers die van toepassing zijn op request. Wordt intern gebruikt door de after-request-hook; applicaties kunnen het rechtstreeks aanroepen wanneer ze CORS-headers vanuit aangepaste middleware uitzenden.

allowed_origins: list | str | None

De geconfigureerde lijst met origins, of de letterlijke waarde '*'. Weerspiegelt het constructorargument allowed_origins; hertoewijzen tijdens runtime om het beleid te wijzigen zonder het object opnieuw op te bouwen.

allow_credentials: bool

Of Access-Control-Allow-Credentials: true wordt uitgezonden bij overeenkomende verzoeken. Weerspiegelt het constructorargument allow_credentials.

allowed_methods: list | None

Lijst met methodenamen die cross-origin zijn toegestaan, of None voor “elke”. Weerspiegelt het constructorargument allowed_methods.

expose_headers: list | None

Lijst met responseheaders die de browser zichtbaar mag maken voor JavaScript, of None om de Access-Control-Expose-Headers-header weg te laten. Weerspiegelt het constructorargument expose_headers.

allowed_headers: list | None

Lijst met namen van requestheaders die cross-origin worden geaccepteerd, in kleine letters, of None voor “echo wat de preflight ook vroeg”. Weerspiegelt het constructorargument allowed_headers (de constructor zet de lijst om naar kleine letters voordat deze wordt opgeslagen).

max_age: int | None

Aantal seconden dat de browser het preflight-antwoord mag cachen, of None om de Access-Control-Max-Age-header weg te laten. Weerspiegelt het constructorargument max_age.

Voorbeeld:

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}

Het preflight-OPTIONS-verzoek wordt automatisch afgehandeld; de camera retourneert de juiste Access-Control-*-headers en 204 No Content. De daadwerkelijke GET / POST / enz. antwoorden krijgen de Access-Control-Allow-Origin-header via de geregistreerde after-request-hook.