Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
WSGI (Web Server Gateway Interface)
WSGI — это стандартный интерфейс взаимодействия между веб-приложением на Python и веб-сервером. Он определяет, как веб-сервер должен передавать информацию о запросе веб-приложению и получать от него ответ.
Зачем нужен WSGI
Без единого стандарта каждый веб-сервер (Nginx, Apache) и каждое веб-приложение (Flask, Django) должны были бы реализовывать свои собственные протоколы общения. WSGI решает эту проблему, предоставляя единый интерфейс, который понимают все стороны.
Как работает WSGI
WSGI приложение — это простая callable функция (класс с call), которая:
- Принимает два аргумента: environ и start_response
- Обрабатывает запрос
- Возвращает итерируемый объект с телом ответа
def application(environ, start_response):
path = environ["PATH_INFO"]
method = environ["REQUEST_METHOD"]
status = "200 OK"
response_headers = [("Content-type", "text/plain")]
start_response(status, response_headers)
return [b"Hello, World!"]
environ — словарь переменных окружения
- REQUEST_METHOD — GET, POST, PUT и т.д.
- PATH_INFO — путь в URL
- QUERY_STRING — строка запроса (параметры после ?)
- CONTENT_TYPE — тип контента
- CONTENT_LENGTH — длина тела запроса
- wsgi.input — поток для чтения тела запроса
- Заголовки в виде HTTP_* (HTTP_USER_AGENT и т.д.)
start_response
Это функция, которая принимает:
- status — строка вида "200 OK" или "404 Not Found"
- response_headers — список кортежей [("Header-Name", "value"), ...]
- exc_info — опционально, для обработки ошибок
start_response("200 OK", [("Content-Type", "application/json")])
Пример с Flask
Популярные веб-фреймворки Flask и Django уже реализуют WSGI интерфейс:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, World!"
Запуск с Gunicorn:
gunicorn app:app
WSGI сервера
- Gunicorn — самый популярный, продакшн-ready
- uWSGI — универсальный сервер приложений
- Waitress — простой WSGI сервер
- mod_wsgi — модуль для Apache
ASGI vs WSGI
ASGI (Asynchronous Server Gateway Interface) — это асинхронная версия WSGI, которая поддерживает async/await и работает с асинхронными приложениями (FastAPI, Starlette, async Django).
WSGI работает синхронно и блокирует между запросами, ASGI позволяет обрабатывать множество запросов одновременно на одном процессе.
Выводы
WSGI — фундаментальный стандарт для веб-разработки на Python. Понимание его механизма важно для отладки, оптимизации и правильной конфигурации продакшн-окружения. Большинство компаний используют именно WSGI/ASGI серверы, поэтому знание этого интерфейса критично для backend разработчика.