microdot.cors — Partage des ressources entre origines (CORS)¶
Ajoute les en-têtes dont un navigateur a besoin pour permettre au JavaScript s’exécutant sur une origine d’appeler vos points de terminaison hébergés par la caméra sur une origine différente. La classe se branche dans le gestionnaire OPTIONS de l’application (pour les requêtes preflight) et dans le hook after-request (pour les en-têtes Access-Control-* des réponses normales).
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
L’instance
microdot.Microdotà laquelle s’attacher. Peut êtreNonepour différer l’attachement ; appelezinitialize()plus tard.- allowed_origins
Une liste de chaînes d’origine (
["https://app.example.com"]) ou le littéral'*'pour autoriser n’importe quelle origine. Les origines qui ne correspondent pas à cette liste n’obtiennent aucun en-tête CORS, ce que le navigateur interprète comme « cette requête n’est pas autorisée ».- allow_credentials
Si
True, ajouteAccess-Control-Allow-Credentials: truepour que le navigateur envoie les cookies et les en-têtes d’authentification avec les requêtes inter-origines. Ne peut pas être utilisé avecallowed_origins='*'pour toute requête nécessitant des identifiants (les navigateurs rejettent cette combinaison).- allowed_methods
Liste des méthodes (
['GET', 'POST']) que le navigateur peut utiliser entre origines.Nonesignifie n’importe laquelle.- expose_headers
Liste des noms d’en-têtes de réponse que le navigateur peut exposer au JavaScript.
- allowed_headers
Liste des noms d’en-têtes de requête que les clients peuvent inclure entre origines.
Nonesignifie n’importe lequel (renvoie en écho leAccess-Control-Request-Headersde la requête preflight).- max_age
Nombre de secondes pendant lesquelles le navigateur peut mettre en cache le résultat du preflight. L’omettre signifie que le navigateur revalide chaque preflight.
- handle_cors
Si
False, la classe est configurée mais ne s’attache pas réellement – utile lorsque vous voulez combiner manuellement sa sortieget_cors_headers()avec d’autres middlewares.
- initialize(app: Microdot, handle_cors: bool = True)¶
S’attache à app si la construction a été différée.
- get_cors_headers(request) dict¶
Calcule l’ensemble des en-têtes
Access-Control-*qui s’appliquent à request. Utilisé en interne par le hook after-request ; les applications peuvent l’appeler directement lorsqu’elles émettent des en-têtes CORS depuis un middleware personnalisé.
- allowed_origins: list | str | None¶
La liste configurée d’origines, ou le littéral
'*'. Reflète l’argument de constructeur allowed_origins ; réaffectez à l’exécution pour modifier la politique sans reconstruire l’objet.
- allow_credentials: bool¶
Indique si
Access-Control-Allow-Credentials: trueest émis sur les requêtes correspondantes. Reflète l’argument de constructeur allow_credentials.
- allowed_methods: list | None¶
Liste des noms de méthodes autorisés entre origines, ou
Nonepour « n’importe laquelle ». Reflète l’argument de constructeur allowed_methods.
- expose_headers: list | None¶
Liste des en-têtes de réponse que le navigateur peut exposer au JavaScript, ou
Nonepour omettre l’en-têteAccess-Control-Expose-Headers. Reflète l’argument de constructeur expose_headers.
Exemple
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}
La requête preflight OPTIONS est traitée automatiquement ; la caméra renvoie les en-têtes Access-Control-* appropriés et 204 No Content. Les réponses réelles aux GET / POST / etc. récupèrent l’en-tête Access-Control-Allow-Origin via le hook after-request enregistré.