РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
268 of 307 menu

Параметр allow_origin_regex

Параметр allow_origin_regex передаётся в CORSMiddleware и задаёт регулярное выражение, которому должен соответствовать заголовок Origin входящего запроса. Если источник совпадает с шаблоном, middleware добавляет в ответ заголовок Access-Control-Allow-Origin с этим источником. Параметр применяется к приложению FastAPI через метод add_middleware. В отличие от allow_origins, где перечисляются точные строки, здесь можно описать целые группы доменов одним шаблоном.

Синтаксис

app.add_middleware( CORSMiddleware, allow_origin_regex=pattern )

Пример

Давайте разрешим запросы со всех поддоменов сайта example.com:

from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware app = FastAPI() app.add_middleware( CORSMiddleware, allow_origin_regex=r'https://.*\.example\.com', allow_methods=['*'], allow_headers=['*'] ) @app.get('/') def index(): return {'text': 'hello'}

Теперь запрос с заголовком Origin: https://user.example.com получит ответ с заголовком Access-Control-Allow-Origin: https://user.example.com. А запрос с Origin: https://other.com будет отклонён.

Пример

Давайте разрешим локальную разработку на любом порту через шаблон с localhost:

from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware app = FastAPI() app.add_middleware( CORSMiddleware, allow_origin_regex=r'http://localhost:\d+', allow_methods=['GET', 'POST'], allow_headers=['*'] ) @app.get('/article') def article(): return {'title': 'article'}

Запрос с Origin: http://localhost:3000 или Origin: http://localhost:8080 будет разрешён, так как оба адреса соответствуют шаблону.

Пример

Давайте проверим поведение через тестовый запрос с помощью TestClient:

from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from fastapi.testclient import TestClient app = FastAPI() app.add_middleware( CORSMiddleware, allow_origin_regex=r'https://.*\.example\.com', allow_methods=['*'], allow_headers=['*'] ) @app.get('/') def index(): return {'text': 'hello'} client = TestClient(app) res = client.get('/', headers={'Origin': 'https://user.example.com'}) print(res.headers.get('access-control-allow-origin'))

Результат выполнения кода:

"https://user.example.com"

Смотрите также

  • класс CORSMiddleware,
    который настраивает политику CORS для приложения
  • параметр allow_origins,
    который задаёт список точных разрешённых источников
  • параметр allow_methods,
    который задаёт разрешённые HTTP-методы
  • параметр allow_headers,
    который задаёт разрешённые заголовки запроса
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить