Класс CORSMiddleware
Класс CORSMiddleware применяется к приложению
FastAPI через метод add_middleware.
Он управляет заголовками ответа, которые определяют,
каким сторонним доменам разрешено обращаться к API,
какие HTTP-методы и заголовки можно использовать,
а также можно ли отправлять куки и учётные данные.
Основные параметры: allow_origins, allow_methods,
allow_headers, allow_credentials,
allow_origin_regex, expose_headers и max_age.
Синтаксис
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=['abcde'],
allow_methods=['GET'],
allow_headers=['*'],
allow_credentials=True,
expose_headers=['X-Custom'],
max_age=600,
)
Пример
Давайте разрешим запросы с одного конкретного домена:
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=['http://abcde.com'],
allow_methods=['GET', 'POST'],
allow_headers=['*'],
)
@app.get('/')
def index():
return {'text': 'hello'}
Теперь браузер сможет обратиться к адресу /
со страницы, размещённой на http://abcde.com,
и получит ответ:
{"text": "hello"}
Пример
Давайте разрешим запросы с любого домена и включим поддержку учётных данных:
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=['*'],
allow_methods=['*'],
allow_headers=['*'],
allow_credentials=True,
)
@app.post('/user')
def user():
return {'name': 'abcde'}
Результат выполнения кода для POST-запроса на адрес /user:
{"name": "abcde"}
Пример
Давайте разрешим домены по регулярному выражению:
Теперь запросы с https://user.abcde.com
и https://api.abcde.com будут разрешены.
Результат выполнения кода:
{"title": "article"}
Смотрите также
-
параметр
allow_origins,
который задаёт список разрешённых источников -
параметр
allow_methods,
который задаёт список разрешённых HTTP-методов -
параметр
allow_headers,
который задаёт список разрешённых заголовков запроса -
параметр
allow_credentials,
который разрешает отправку куки и учётных данных