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ýt None pro odklad připojení; zavolejte initialize() 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 s allowed_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. None znamená 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. None znamená jakékoli (vrátí preflightovou Access-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ýstup get_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 None pro „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 None pro vynechání hlavičky Access-Control-Expose-Headers. Zrcadlí argument konstruktoru expose_headers.

allowed_headers: list | None

Seznam názvů hlaviček požadavku přijímaných napříč původy, převedených na malá písmena, nebo None pro „vrátit cokoli, o co preflight požádal“. Zrcadlí argument konstruktoru allowed_headers (konstruktor seznam před uložením převede na malá písmena).

max_age: int | None

Počet sekund, po které prohlížeč může odpověď preflightu ukládat do mezipaměti, nebo None pro vynechání hlavičky Access-Control-Max-Age. Zrcadlí argument konstruktoru max_age.

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.