Ответ
Middleware (промежуточное ПО) — это компонент, который встраивается в конвейер обработки HTTP-запроса и ответа в веб-приложении. Он обрабатывает запрос до того, как он достигнет основного обработчика (view/controller), и/или обрабатывает ответ перед его отправкой клиенту.
Middleware можно представить как слои луковицы: запрос последовательно проходит через каждый слой на пути к ядру приложения, а ответ возвращается через них в обратном порядке.
Основные задачи, решаемые с помощью Middleware:
- Аутентификация и авторизация: Проверка учетных данных пользователя и его прав доступа.
- Логирование: Запись информации о каждом входящем запросе и исходящем ответе.
- Обработка ошибок: Централизованный перехват исключений и формирование стандартизированных ответов об ошибках.
- CORS: Добавление необходимых заголовков для кросс-доменных запросов.
- Сжатие: Сжатие тела ответа (например, с помощью Gzip) для уменьшения трафика.
- Кеширование: Добавление заголовков для управления кешированием на стороне клиента или сервера.
Пример Middleware в FastAPI:
Этот Middleware измеряет время обработки запроса и добавляет его в заголовки ответа.
import time
from fastapi import FastAPI, Request
app = FastAPI()
@app.middleware("http")
async def add_process_time_header(request: Request, call_next):
# Код, который выполняется до обработчика эндпоинта
start_time = time.time()
# Передача запроса следующему Middleware или обработчику
response = await call_next(request)
# Код, который выполняется после обработчика эндпоинта
process_time = time.time() - start_time
response.headers["X-Process-Time"] = str(process_time)
return response
@app.get("/")
async def root():
return {"message": "Hello, World!"}
В Django Middleware конфигурируются в settings.py
в виде списка классов, а во Flask могут быть реализованы через декораторы (@app.before_request
) или как WSGI-обертки.