microdot.cors — Cross-Origin Resource Sharing¶
Добавляет заголовки, необходимые браузеру, чтобы разрешить JavaScript, выполняющемуся на одном источнике, вызывать ваши размещённые на камере эндпоинты на другом источнике. Класс подключается к обработчику OPTIONS приложения (для предварительных запросов preflight) и к хуку after-request (для заголовков 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, чтобы браузер отправлял файлы cookie и заголовки аутентификации с межсайтовыми запросами. Не может использоваться с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. Используется внутренне хуком after-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 через зарегистрированный хук after-request.