microdot.cors — Cross-Origin Resource Sharing

Hozzáadja azokat a fejléceket, amelyekre a böngészőnek szüksége van ahhoz, hogy egy adott eredetről (origin) futó JavaScript meghívhassa a kamerán futtatott végpontjaidat egy másik eredetről. Az osztály beépül az alkalmazás OPTIONS kezelőjébe (az előzetes, preflight kérésekhez) és a kérés utáni hookba (a normál válaszokon szereplő Access-Control-* fejlécekhez).

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

A csatolandó microdot.Microdot példány. Lehet None a csatolás elhalasztásához; ekkor hívd meg a initialize() metódust később.

allowed_origins

Eredet-karakterláncok listája (["https://app.example.com"]), vagy a szó szerinti '*' bármely eredet engedélyezéséhez. Azok az eredetek, amelyek nem szerepelnek ezen a listán, nem kapnak CORS-fejléceket, amit a böngésző úgy értelmez, hogy „ez a kérés nem engedélyezett”.

allow_credentials

Ha True, hozzáadja az Access-Control-Allow-Credentials: true fejlécet, így a böngésző sütiket és hitelesítési fejléceket küld a cross-origin kérésekkel. Nem használható az allowed_origins='*' beállítással olyan kérés esetén, amelyhez hitelesítő adatok kellenek (a böngészők elutasítják ezt a kombinációt).

allowed_methods

Azon metódusok listája (['GET', 'POST']), amelyeket a böngésző cross-origin használhat. A None jelentése: bármelyik.

expose_headers

Azon válaszfejléc-nevek listája, amelyeket a böngésző elérhetővé tehet a JavaScript számára.

allowed_headers

Azon kérésfejléc-nevek listája, amelyeket a kliensek cross-origin csatolhatnak. A None jelentése: bármelyik (visszatükrözi a preflight Access-Control-Request-Headers fejlécét).

max_age

Az a másodpercszám, ameddig a böngésző gyorsítótárazhatja a preflight eredményét. Kihagyása azt jelenti, hogy a böngésző minden preflightnál újraellenőriz.

handle_cors

Ha False, az osztály konfigurálva van, de valójában nem csatolja önmagát – hasznos, ha a get_cors_headers() kimenetét manuálisan szeretnéd más middleware-rel kombinálni.

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

Csatolódik az app-hoz, ha a létrehozás el lett halasztva.

get_cors_headers(request) dict

Kiszámítja az request-re vonatkozó Access-Control-* fejlécek halmazát. A kérés utáni hook belsőleg használja; az alkalmazások közvetlenül is meghívhatják, amikor egyéni middleware-ből bocsátanak ki CORS-fejléceket.

allowed_origins: list | str | None

A beállított eredetek listája, vagy a szó szerinti '*'. Tükrözi az allowed_origins konstruktorargumentumot; futásidőben újra értékül adva megváltoztathatod a házirendet az objektum újraépítése nélkül.

allow_credentials: bool

Hogy az Access-Control-Allow-Credentials: true ki van-e bocsátva az illeszkedő kérésekre. Tükrözi az allow_credentials konstruktorargumentumot.

allowed_methods: list | None

A cross-origin engedélyezett metódusnevek listája, vagy None a „bármelyik” jelentéshez. Tükrözi az allowed_methods konstruktorargumentumot.

expose_headers: list | None

Azon válaszfejlécek listája, amelyeket a böngésző elérhetővé tehet a JavaScript számára, vagy None az Access-Control-Expose-Headers fejléc kihagyásához. Tükrözi az expose_headers konstruktorargumentumot.

allowed_headers: list | None

A cross-origin elfogadott kérésfejléc-nevek listája, kisbetűsítve, vagy None a „tükrözd vissza, amit a preflight kért” jelentéshez. Tükrözi az allowed_headers konstruktorargumentumot (a konstruktor tárolás előtt kisbetűsíti a listát).

max_age: int | None

Az a másodpercszám, ameddig a böngésző gyorsítótárazhatja a preflight választ, vagy None az Access-Control-Max-Age fejléc kihagyásához. Tükrözi a max_age konstruktorargumentumot.

Példa:

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}

A preflight OPTIONS kérés automatikusan kezelődik; a kamera visszaadja a megfelelő Access-Control-* fejléceket és a 204 No Content választ. A tényleges GET / POST / stb. válaszok a regisztrált kérés utáni hookon keresztül kapják meg az Access-Control-Allow-Origin fejlécet.