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. MagNonezijn om koppeling uit te stellen; roep laterinitialize()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, voegAccess-Control-Allow-Credentials: truetoe zodat de browser cookies en auth-headers meestuurt bij cross-origin-verzoeken. Kan niet gebruikt worden metallowed_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.Nonebetekent 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.
Nonebetekent elke (echoot deAccess-Control-Request-Headersvan 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
Falsewordt de klasse geconfigureerd maar koppelt deze zichzelf niet daadwerkelijk – handig wanneer je deget_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: truewordt uitgezonden bij overeenkomende verzoeken. Weerspiegelt het constructorargument allow_credentials.
- allowed_methods: list | None¶
Lijst met methodenamen die cross-origin zijn toegestaan, of
Nonevoor “elke”. Weerspiegelt het constructorargument allowed_methods.
- expose_headers: list | None¶
Lijst met responseheaders die de browser zichtbaar mag maken voor JavaScript, of
Noneom deAccess-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
Nonevoor “echo wat de preflight ook vroeg”. Weerspiegelt het constructorargument allowed_headers (de constructor zet de lijst om naar kleine letters voordat deze wordt opgeslagen).
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.