microdot.cors — Intercambio de recursos de origen cruzado¶
Agrega los encabezados que un navegador necesita para permitir que el JavaScript que se ejecuta en un origen llame a sus endpoints alojados en la cámara en un origen diferente. La clase se integra en el controlador OPTIONS de la aplicación (para las solicitudes de comprobación previa) y en el gancho posterior a la solicitud (para los encabezados Access-Control-* en las respuestas 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
La instancia de
microdot.Microdota la que adjuntarse. Puede serNonepara diferir la conexión; llame ainitialize()más tarde.- allowed_origins
Una lista de cadenas de origen (
["https://app.example.com"]) o el literal'*'para permitir cualquier origen. Los orígenes que no coinciden con esta lista no obtienen encabezados CORS, lo que el navegador interpreta como «esta solicitud no está permitida».- allow_credentials
Si es
True, agregaAccess-Control-Allow-Credentials: truepara que el navegador envíe cookies y encabezados de autenticación con las solicitudes de origen cruzado. No puede usarse conallowed_origins='*'para ninguna solicitud que necesite credenciales (los navegadores rechazan esa combinación).- allowed_methods
Lista de métodos (
['GET', 'POST']) que el navegador puede usar en origen cruzado.Nonesignifica cualquiera.- expose_headers
Lista de nombres de encabezados de respuesta que el navegador puede exponer a JavaScript.
- allowed_headers
Lista de nombres de encabezados de solicitud que los clientes pueden incluir en origen cruzado.
Nonesignifica cualquiera (refleja elAccess-Control-Request-Headersde la comprobación previa).- max_age
Segundos durante los cuales el navegador puede almacenar en caché el resultado de la comprobación previa. Omitirlo significa que el navegador revalida cada comprobación previa.
- handle_cors
Si es
False, la clase se configura pero no se adjunta realmente: útil cuando se desea combinar manualmente su salida deget_cors_headers()con otro middleware.
- initialize(app: Microdot, handle_cors: bool = True)¶
Se adjunta a app si la construcción se difirió.
- get_cors_headers(request) dict¶
Calcula el conjunto de encabezados
Access-Control-*que se aplican a request. Lo utiliza internamente el gancho posterior a la solicitud; las aplicaciones pueden llamarlo directamente al emitir encabezados CORS desde middleware personalizado.
- allowed_origins: list | str | None¶
La lista configurada de orígenes, o el literal
'*'. Refleja el argumento del constructor allowed_origins; reasígnelo en tiempo de ejecución para cambiar la política sin reconstruir el objeto.
- allow_credentials: bool¶
Si se emite
Access-Control-Allow-Credentials: trueen las solicitudes coincidentes. Refleja el argumento del constructor allow_credentials.
- allowed_methods: list | None¶
Lista de nombres de métodos permitidos en origen cruzado, o
Nonepara «cualquiera». Refleja el argumento del constructor allowed_methods.
- expose_headers: list | None¶
Lista de encabezados de respuesta que el navegador puede exponer a JavaScript, o
Nonepara omitir el encabezadoAccess-Control-Expose-Headers. Refleja el argumento del constructor expose_headers.
- allowed_headers: list | None¶
Lista de nombres de encabezados de solicitud aceptados en origen cruzado, en minúsculas, o
Nonepara «reflejar lo que la comprobación previa haya solicitado». Refleja el argumento del constructor allowed_headers (el constructor convierte la lista a minúsculas antes de almacenarla).
Ejemplo:
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 solicitud de comprobación previa OPTIONS se gestiona automáticamente; la cámara devuelve los encabezados Access-Control-* apropiados y 204 No Content. Las respuestas reales GET / POST / etc. obtienen el encabezado Access-Control-Allow-Origin mediante el gancho posterior a la solicitud registrado.