← Назад к вопросам

Что такое WSGI?

2.0 Middle🔥 211 комментариев
#FastAPI и Flask#REST API и HTTP

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

WSGI (Web Server Gateway Interface)

WSGI — это стандартный интерфейс взаимодействия между веб-приложением на Python и веб-сервером. Он определяет, как веб-сервер должен передавать информацию о запросе веб-приложению и получать от него ответ.

Зачем нужен WSGI

Без единого стандарта каждый веб-сервер (Nginx, Apache) и каждое веб-приложение (Flask, Django) должны были бы реализовывать свои собственные протоколы общения. WSGI решает эту проблему, предоставляя единый интерфейс, который понимают все стороны.

Как работает WSGI

WSGI приложение — это простая callable функция (класс с call), которая:

  1. Принимает два аргумента: environ и start_response
  2. Обрабатывает запрос
  3. Возвращает итерируемый объект с телом ответа
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

Это функция, которая принимает:

  1. status — строка вида "200 OK" или "404 Not Found"
  2. response_headers — список кортежей [("Header-Name", "value"), ...]
  3. 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 разработчика.

Что такое WSGI? | PrepBro