microdot.cors — Cross-Origin Resource Sharing

Lägger till de huvuden som en webbläsare behöver för att tillåta JavaScript som körs på ett ursprung (origin) att anropa dina kameravärdda slutpunkter på ett annat ursprung. Klassen kopplar in sig själv i applikationens OPTIONS-hanterare (för preflight-begäranden) och after-request-hook (för Access-Control-*-huvudena på normala svar).

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

Instansen microdot.Microdot att koppla till. Får vara None för att skjuta upp inkopplingen; anropa initialize() senare.

allowed_origins

En lista med ursprungssträngar (["https://app.example.com"]) eller den literala '*' för att tillåta valfritt ursprung. Ursprung som inte matchar denna lista får inga CORS-huvuden, vilket webbläsaren tolkar som ”denna begäran är inte tillåten”.

allow_credentials

Om True, lägg till Access-Control-Allow-Credentials: true så att webbläsaren skickar cookies och autentiseringshuvuden med begäranden mellan ursprung. Kan inte användas med allowed_origins='*' för någon begäran som behöver inloggningsuppgifter (webbläsare avvisar den kombinationen).

allowed_methods

Lista med metoder (['GET', 'POST']) som webbläsaren får använda mellan ursprung. None betyder valfri.

expose_headers

Lista med namn på svarshuvuden som webbläsaren får exponera för JavaScript.

allowed_headers

Lista med namn på begäranhuvuden som klienter får inkludera mellan ursprung. None betyder valfri (ekar preflight-begärans Access-Control-Request-Headers).

max_age

Sekunder som webbläsaren får cacha preflight-resultatet. Att hoppa över det innebär att webbläsaren omvaliderar varje preflight.

handle_cors

Om False konfigureras klassen men kopplar inte faktiskt in sig själv – användbart när du vill kombinera dess get_cors_headers()-utdata manuellt med annan mellanprogramvara.

initialize(app: Microdot, handle_cors: bool = True)

Koppla till app om konstruktionen sköts upp.

get_cors_headers(request) dict

Beräkna uppsättningen Access-Control-*-huvuden som gäller för request. Används internt av after-request-hooken; applikationer kan anropa den direkt när de avger CORS-huvuden från anpassad mellanprogramvara.

allowed_origins: list | str | None

Den konfigurerade listan med ursprung, eller den literala '*'. Speglar konstruktorargumentet allowed_origins; tilldela på nytt vid körning för att ändra policyn utan att bygga om objektet.

allow_credentials: bool

Huruvida Access-Control-Allow-Credentials: true avges på matchande begäranden. Speglar konstruktorargumentet allow_credentials.

allowed_methods: list | None

Lista med metodnamn som tillåts mellan ursprung, eller None för ”valfri”. Speglar konstruktorargumentet allowed_methods.

expose_headers: list | None

Lista med svarshuvuden som webbläsaren får exponera för JavaScript, eller None för att utelämna huvudet Access-Control-Expose-Headers. Speglar konstruktorargumentet expose_headers.

allowed_headers: list | None

Lista med namn på begäranhuvuden som accepteras mellan ursprung, i gemener, eller None för ”eka vad preflight än frågade efter”. Speglar konstruktorargumentet allowed_headers (konstruktorn gör om listan till gemener innan den lagras).

max_age: int | None

Sekunder som webbläsaren får cacha preflight-svaret, eller None för att utelämna huvudet Access-Control-Max-Age. Speglar konstruktorargumentet max_age.

Exempel:

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}

Preflight-begäran OPTIONS hanteras automatiskt; kameran returnerar lämpliga Access-Control-*-huvuden och 204 No Content. Faktiska svar på GET / POST / osv. får huvudet Access-Control-Allow-Origin via den registrerade after-request-hooken.