microdot.cors — Cross-Origin Resource Sharing

Додає заголовки, необхідні браузеру, щоб дозволити JavaScript, що виконується на одному джерелі, звертатися до ваших кінцевих точок на камері, розміщених на іншому джерелі. Клас підключає себе до обробника OPTIONS застосунку (для preflight-запитів) та хука після запиту (для заголовків Access-Control-* у звичайних відповідях).

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, до якого слід підключитися. Може бути None для відкладеного підключення; пізніше викличте initialize().

allowed_origins

Список рядків джерел (["https://app.example.com"]) або літерал '*' для дозволу будь-якого джерела. Джерела, що не відповідають цьому списку, не отримують заголовків CORS, що браузер трактує як «цей запит не дозволено».

allow_credentials

Якщо True, додає Access-Control-Allow-Credentials: true, щоб браузер надсилав куки та заголовки автентифікації у міжджерельних запитах. Не можна використовувати з allowed_origins='*' для запитів, що потребують облікових даних (браузери відхиляють таку комбінацію).

allowed_methods

Список методів (['GET', 'POST']), які браузер може використовувати міжджерельно. None означає будь-який.

expose_headers

Список назв заголовків відповіді, які браузер може відкривати для JavaScript.

allowed_headers

Список назв заголовків запиту, які клієнти можуть включати міжджерельно. None означає будь-який (повторює Access-Control-Request-Headers preflight-запиту).

max_age

Кількість секунд, протягом яких браузер може кешувати результат preflight. Якщо не вказано, браузер повторно перевіряє кожен preflight.

handle_cors

Якщо False, клас налаштовано, але він фактично не підключається — корисно, коли потрібно вручну поєднати вивід get_cors_headers() з іншим проміжним програмним забезпеченням.

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

Підключити до app, якщо конструювання було відкладено.

get_cors_headers(request) dict

Обчислює набір заголовків Access-Control-*, що застосовуються до request. Використовується внутрішньо хуком після запиту; застосунки можуть викликати його безпосередньо при відправці заголовків CORS з власного проміжного програмного забезпечення.

allowed_origins: list | str | None

Налаштований список джерел або літерал '*'. Відображає аргумент конструктора allowed_origins; переприсвойте під час виконання, щоб змінити політику без перестворення об’єкта.

allow_credentials: bool

Чи відправляється Access-Control-Allow-Credentials: true у відповідних запитах. Відображає аргумент конструктора allow_credentials.

allowed_methods: list | None

Список назв методів, дозволених міжджерельно, або None для «будь-якого». Відображає аргумент конструктора allowed_methods.

expose_headers: list | None

Список заголовків відповіді, які браузер може відкривати для JavaScript, або None для пропуску заголовка Access-Control-Expose-Headers. Відображає аргумент конструктора expose_headers.

allowed_headers: list | None

Список назв заголовків запиту, що приймаються міжджерельно, у нижньому регістрі, або None для «відлунювати те, що запитував preflight». Відображає аргумент конструктора allowed_headers (конструктор зберігає список у нижньому регістрі).

max_age: int | None

Кількість секунд, протягом яких браузер може кешувати preflight-відповідь, або None для пропуску заголовка Access-Control-Max-Age. Відображає аргумент конструктора max_age.

Приклад:

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-запит OPTIONS обробляється автоматично; камера повертає відповідні заголовки Access-Control-* та 204 No Content. Звичайні запити GET / POST / тощо отримують заголовок Access-Control-Allow-Origin через зареєстрований хук після запиту.