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-Headerspreflight-запиту).- 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.
Приклад:
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 через зареєстрований хук після запиту.