microdot.cors — Cross-Origin Resource Sharing

Lisää otsakkeet, joita selain tarvitsee salliakseen yhdellä alkuperällä toimivan JavaScriptin kutsua kameran isännöimiä päätepisteitäsi toisella alkuperällä. Luokka kytkee itsensä sovelluksen OPTIONS-käsittelijään (esitarkistuspyyntöjä varten) ja pyynnön jälkeiseen koukkuun (normaalien vastausten Access-Control-*-otsakkeita varten).

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

microdot.Microdot-instanssi, johon liitytään. Voi olla None liittymisen lykkäämiseksi; kutsu initialize() myöhemmin.

allowed_origins

Lista alkuperämerkkijonoja (["https://app.example.com"]) tai kirjaimellinen '*', joka sallii minkä tahansa alkuperän. Alkuperät, jotka eivät täsmää tähän listaan, eivät saa CORS-otsakkeita, minkä selain tulkitsee tarkoittavan, että ”tämä pyyntö ei ole sallittu”.

allow_credentials

Jos True, lisää Access-Control-Allow-Credentials: true, jotta selain lähettää evästeet ja todennusotsakkeet alkuperien välisten pyyntöjen mukana. Ei voida käyttää yhdessä asetuksen allowed_origins='*' kanssa missään pyynnössä, joka tarvitsee tunnistetietoja (selaimet hylkäävät tämän yhdistelmän).

allowed_methods

Lista metodeista (['GET', 'POST']), joita selain saa käyttää alkuperien välillä. None tarkoittaa mitä tahansa.

expose_headers

Lista vastausotsakkeiden nimistä, jotka selain saa paljastaa JavaScriptille.

allowed_headers

Lista pyyntöotsakkeiden nimistä, joita asiakkaat saavat sisällyttää alkuperien välillä. None tarkoittaa mitä tahansa (toistaa esitarkistuksen Access-Control-Request-Headers-arvon).

max_age

Sekuntimäärä, jonka ajan selain saa tallentaa esitarkistuksen tuloksen välimuistiin. Sen ohittaminen tarkoittaa, että selain uudelleenvalidoi jokaisen esitarkistuksen.

handle_cors

Jos False, luokka konfiguroidaan mutta se ei varsinaisesti liitä itseään – hyödyllinen, kun haluat yhdistää sen get_cors_headers()-tulosteen manuaalisesti muun väliohjelmiston kanssa.

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

Liittyy kohteeseen app, jos rakentaminen lykättiin.

get_cors_headers(request) dict

Laskee joukon Access-Control-*-otsakkeita, jotka koskevat pyyntöä request. Pyynnön jälkeinen koukku käyttää tätä sisäisesti; sovellukset voivat kutsua sitä suoraan lähettäessään CORS-otsakkeita mukautetusta väliohjelmistosta.

allowed_origins: list | str | None

Konfiguroitu lista alkuperistä tai kirjaimellinen '*'. Heijastaa konstruktorin argumenttia allowed_origins; aseta uudelleen ajonaikana muuttaaksesi käytäntöä ilman objektin uudelleenrakentamista.

allow_credentials: bool

Lähetetäänkö Access-Control-Allow-Credentials: true täsmäävissä pyynnöissä. Heijastaa konstruktorin argumenttia allow_credentials.

allowed_methods: list | None

Lista alkuperien välillä sallituista metodinimistä tai None arvolle ”mikä tahansa”. Heijastaa konstruktorin argumenttia allowed_methods.

expose_headers: list | None

Lista vastausotsakkeista, jotka selain saa paljastaa JavaScriptille, tai None Access-Control-Expose-Headers-otsakkeen poisjättämiseksi. Heijastaa konstruktorin argumenttia expose_headers.

allowed_headers: list | None

Lista alkuperien välillä hyväksytyistä pyyntöotsakkeiden nimistä pienin kirjaimin tai None arvolle ”toista mitä esitarkistus pyysi”. Heijastaa konstruktorin argumenttia allowed_headers (konstruktori muuntaa listan pieniksi kirjaimiksi ennen tallentamista).

max_age: int | None

Sekuntimäärä, jonka ajan selain saa tallentaa esitarkistusvastauksen välimuistiin, tai None Access-Control-Max-Age-otsakkeen poisjättämiseksi. Heijastaa konstruktorin argumenttia max_age.

Esimerkki:

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}

Esitarkistuksen OPTIONS-pyyntö käsitellään automaattisesti; kamera palauttaa asianmukaiset Access-Control-*-otsakkeet ja 204 No Content. Varsinaiset GET- / POST- yms. vastaukset saavat Access-Control-Allow-Origin-otsakkeen rekisteröidyn pyynnön jälkeisen koukun kautta.