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łajinitialize()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, dodajeAccess-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ć zallowed_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.Noneoznacza 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.
Noneoznacza dowolne (odzwierciedlaAccess-Control-Request-Headersz żą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ścieget_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: truejest emitowane dla pasujących żądań. Odzwierciedla argument konstruktora allow_credentials.
- allowed_methods: list | None¶
Lista nazw metod dozwolonych między źródłami lub
Nonedla „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łówekAccess-Control-Expose-Headers. Odzwierciedla argument konstruktora expose_headers.
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.