microdot.cors — Cross-Origin Resource Sharing¶
Aggiunge gli header di cui un browser ha bisogno per consentire a JavaScript in esecuzione su un’origine di chiamare i tuoi endpoint ospitati dalla camera su un’origine diversa. La classe si collega all’handler OPTIONS dell’applicazione (per le richieste preflight) e all’hook after-request (per gli header Access-Control-* sulle risposte normali).
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’istanza
microdot.Microdota cui collegarsi. Può essereNoneper posticipare il collegamento; chiamainitialize()in seguito.- allowed_origins
Un elenco di stringhe di origine (
["https://app.example.com"]) oppure il valore letterale'*'per consentire qualsiasi origine. Le origini che non corrispondono a questo elenco non ricevono header CORS, cosa che il browser interpreta come «questa richiesta non è consentita».- allow_credentials
Se
True, aggiungeAccess-Control-Allow-Credentials: truein modo che il browser invii cookie e header di autenticazione con le richieste cross-origin. Non può essere utilizzato conallowed_origins='*'per nessuna richiesta che necessiti di credenziali (i browser rifiutano tale combinazione).- allowed_methods
Elenco di metodi (
['GET', 'POST']) che il browser può utilizzare cross-origin.Nonesignifica qualsiasi.- expose_headers
Elenco di nomi di header di risposta che il browser può esporre a JavaScript.
- allowed_headers
Elenco di nomi di header di richiesta che i client possono includere cross-origin.
Nonesignifica qualsiasi (restituisce l”Access-Control-Request-Headersdella richiesta preflight).- max_age
Secondi durante i quali il browser può memorizzare nella cache il risultato del preflight. Ometterlo significa che il browser riconvalida ogni preflight.
- handle_cors
Se
False, la classe è configurata ma non si collega effettivamente – utile quando si desidera combinare manualmente l’output diget_cors_headers()con altro middleware.
- initialize(app: Microdot, handle_cors: bool = True)¶
Si collega a app se la costruzione è stata posticipata.
- get_cors_headers(request) dict¶
Calcola l’insieme di header
Access-Control-*applicabili a request. Utilizzato internamente dall’hook after-request; le applicazioni possono chiamarlo direttamente quando emettono header CORS da middleware personalizzato.
- allowed_origins: list | str | None¶
L’elenco configurato di origini, oppure il valore letterale
'*'. Rispecchia l’argomento del costruttore allowed_origins; riassegnalo a runtime per modificare la policy senza ricostruire l’oggetto.
- allow_credentials: bool¶
Indica se
Access-Control-Allow-Credentials: trueviene emesso sulle richieste corrispondenti. Rispecchia l’argomento del costruttore allow_credentials.
- allowed_methods: list | None¶
Elenco di nomi di metodi consentiti cross-origin, oppure
Noneper «qualsiasi». Rispecchia l’argomento del costruttore allowed_methods.
- expose_headers: list | None¶
Elenco di header di risposta che il browser può esporre a JavaScript, oppure
Noneper omettere l’headerAccess-Control-Expose-Headers. Rispecchia l’argomento del costruttore expose_headers.
- allowed_headers: list | None¶
Elenco di nomi di header di richiesta accettati cross-origin, in minuscolo, oppure
Noneper «restituire qualsiasi cosa abbia richiesto il preflight». Rispecchia l’argomento del costruttore allowed_headers (il costruttore converte l’elenco in minuscolo prima di memorizzarlo).
Esempio:
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 richiesta preflight OPTIONS viene gestita automaticamente; la camera restituisce gli header Access-Control-* appropriati e 204 No Content. Le risposte effettive GET / POST / ecc. ricevono l’header Access-Control-Allow-Origin tramite l’hook after-request registrato.