microdot.cors — Cross-Origin Resource Sharing¶
Přidává hlavičky, které prohlížeč potřebuje, aby JavaScriptu běžícímu na jednom původu (origin) povolil volat vaše koncové body hostované kamerou na jiném původu. Třída se sama zapojí do aplikačního handleru OPTIONS (pro preflight požadavky) a do hooku po požadavku (pro hlavičky Access-Control-* na běžných odpovědích).
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
Instance
microdot.Microdot, ke které se připojit. Může býtNonepro odklad připojení; zavolejteinitialize()později.- allowed_origins
Seznam řetězců s původy (
["https://app.example.com"]) nebo doslovný'*'pro povolení libovolného původu. Původy, které tomuto seznamu neodpovídají, nedostanou žádné hlavičky CORS, což prohlížeč interpretuje jako „tento požadavek není povolen“.- allow_credentials
Pokud
True, přidáAccess-Control-Allow-Credentials: true, aby prohlížeč s požadavky napříč původy odesílal cookies a autentizační hlavičky. Nelze použít sallowed_origins='*'pro žádný požadavek, který potřebuje přihlašovací údaje (prohlížeče tuto kombinaci odmítají).- allowed_methods
Seznam metod (
['GET', 'POST']), které prohlížeč může použít napříč původy.Noneznamená jakékoli.- expose_headers
Seznam názvů hlaviček odpovědi, které prohlížeč může zpřístupnit JavaScriptu.
- allowed_headers
Seznam názvů hlaviček požadavku, které klienti mohou zahrnout napříč původy.
Noneznamená jakékoli (vrátí preflightovouAccess-Control-Request-Headers).- max_age
Počet sekund, po které prohlížeč může výsledek preflightu ukládat do mezipaměti. Vynechání znamená, že prohlížeč při každém preflightu provede opětovné ověření.
- handle_cors
Pokud
False, třída je nakonfigurována, ale ve skutečnosti se nepřipojí – užitečné, když chcete výstupget_cors_headers()ručně zkombinovat s jiným middlewarem.
- initialize(app: Microdot, handle_cors: bool = True)¶
Připojí se k app, pokud byla konstrukce odložena.
- get_cors_headers(request) dict¶
Vypočítá sadu hlaviček
Access-Control-*, které se vztahují na request. Interně používáno hookem po požadavku; aplikace jej mohou volat přímo, když vydávají hlavičky CORS z vlastního middlewaru.
- allowed_origins: list | str | None¶
Nakonfigurovaný seznam původů, nebo doslovný
'*'. Zrcadlí argument konstruktoru allowed_origins; přiřaďte za běhu znovu pro změnu politiky bez opětovného sestavení objektu.
- allow_credentials: bool¶
Zda je u odpovídajících požadavků vydáno
Access-Control-Allow-Credentials: true. Zrcadlí argument konstruktoru allow_credentials.
- allowed_methods: list | None¶
Seznam názvů metod povolených napříč původy, nebo
Nonepro „jakékoli“. Zrcadlí argument konstruktoru allowed_methods.
- expose_headers: list | None¶
Seznam hlaviček odpovědi, které prohlížeč může zpřístupnit JavaScriptu, nebo
Nonepro vynechání hlavičkyAccess-Control-Expose-Headers. Zrcadlí argument konstruktoru expose_headers.
Příklad:
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}
Preflightový požadavek OPTIONS je zpracován automaticky; kamera vrátí příslušné hlavičky Access-Control-* a 204 No Content. Skutečné odpovědi GET / POST / atd. získají hlavičku Access-Control-Allow-Origin prostřednictvím registrovaného hooku po požadavku.