microdot.cors — Cross-Origin Resource Sharing

Dodaje nagłówki, których przeglądarka potrzebuje, aby zezwolić kodowi JavaScript działającemu w jednym źródle (origin) na wywoływanie punktów końcowych hostowanych przez kamerę w innym źródle. Klasa wpina się w procedurę obsługi OPTIONS aplikacji (dla żądań preflight) oraz w punkt zaczepienia po żądaniu (dla nagłówków Access-Control-* w zwykłych odpowiedziach).

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

Instancja microdot.Microdot, do której należy się podłączyć. Może być None, aby odroczyć podłączenie; wywołaj initialize() później.

allowed_origins

Lista ciągów źródeł (["https://app.example.com"]) lub dosłowne '*', aby zezwolić na dowolne źródło. Źródła niepasujące do tej listy nie otrzymują żadnych nagłówków CORS, co przeglądarka interpretuje jako „to żądanie jest niedozwolone”.

allow_credentials

Jeśli True, dodaje Access-Control-Allow-Credentials: true, aby przeglądarka wysyłała pliki cookie i nagłówki uwierzytelniania z żądaniami między źródłami. Nie można tego używać z allowed_origins='*' dla żadnego żądania wymagającego poświadczeń (przeglądarki odrzucają tę kombinację).

allowed_methods

Lista metod (['GET', 'POST']), których przeglądarka może używać między źródłami. None oznacza dowolną.

expose_headers

Lista nazw nagłówków odpowiedzi, które przeglądarka może udostępnić kodowi JavaScript.

allowed_headers

Lista nazw nagłówków żądań, które klienci mogą dołączać między źródłami. None oznacza dowolne (odzwierciedla Access-Control-Request-Headers z żądania preflight).

max_age

Sekundy, przez które przeglądarka może buforować wynik preflight. Pominięcie tego oznacza, że przeglądarka ponownie weryfikuje każdy preflight.

handle_cors

Jeśli False, klasa jest skonfigurowana, ale faktycznie się nie podłącza – przydatne, gdy chcesz ręcznie połączyć jej wyjście get_cors_headers() z innym oprogramowaniem pośredniczącym.

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

Podłącza do app, jeśli konstrukcja została odroczona.

get_cors_headers(request) dict

Oblicza zestaw nagłówków Access-Control-* mających zastosowanie do request. Używane wewnętrznie przez punkt zaczepienia po żądaniu; aplikacje mogą wywoływać to bezpośrednio przy emitowaniu nagłówków CORS z niestandardowego oprogramowania pośredniczącego.

allowed_origins: list | str | None

Skonfigurowana lista źródeł lub dosłowne '*'. Odzwierciedla argument konstruktora allowed_origins; przypisz ponownie w czasie działania, aby zmienić politykę bez przebudowywania obiektu.

allow_credentials: bool

Określa, czy Access-Control-Allow-Credentials: true jest emitowane dla pasujących żądań. Odzwierciedla argument konstruktora allow_credentials.

allowed_methods: list | None

Lista nazw metod dozwolonych między źródłami lub None dla „dowolnej”. Odzwierciedla argument konstruktora allowed_methods.

expose_headers: list | None

Lista nagłówków odpowiedzi, które przeglądarka może udostępnić kodowi JavaScript, lub None, aby pominąć nagłówek Access-Control-Expose-Headers. Odzwierciedla argument konstruktora expose_headers.

allowed_headers: list | None

Lista nazw nagłówków żądań akceptowanych między źródłami, zapisana małymi literami, lub None dla „odzwierciedl to, o co poprosił preflight”. Odzwierciedla argument konstruktora allowed_headers (konstruktor zapisuje listę małymi literami przed jej zapisaniem).

max_age: int | None

Sekundy, przez które przeglądarka może buforować odpowiedź preflight, lub None, aby pominąć nagłówek Access-Control-Max-Age. Odzwierciedla argument konstruktora max_age.

Przykład:

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}

Żądanie preflight OPTIONS jest obsługiwane automatycznie; kamera zwraca odpowiednie nagłówki Access-Control-* oraz 204 No Content. Faktyczne odpowiedzi GET / POST / itp. otrzymują nagłówek Access-Control-Allow-Origin za pośrednictwem zarejestrowanego punktu zaczepienia po żądaniu.