Понимание WSGI

Я пытаюсь понять функциональность WSGI и нуждаюсь в некоторой помощи.

До сих пор я знаю, что это своего рода промежуточное ПО между серверами и приложениями, используемое для взаимодействия с другими приложениями (которые находятся на стороне сервера) с приложением, при условии, что в рассматриваемой структуре есть адаптер WSGI. Продолжая теоретическую часть, я знаю, что для взаимодействия сервера с приложением сервер вызывает вызываемый (который принимает два аргумента: переменные среды и функция start_response). Здесь функция start_response предоставляется сервером (?) И используется приложением с состоянием ответа и заголовком, за которым следует тело ответа.

Я мало понимаю, что я написал выше, так что вот вопросы новичка: 1) Каков общий поток вызовов? Приложение будет предоставлять сервер вызываемому, а затем сервер будет вызывать приложение с использованием вызываемого и использовать env_vars и функцию start_response в качестве аргументов?

2) Что меня больше смущает, так это то, что приложение отправляет заголовки запросов, а затем отправляет тело ответа. Что это за запрос?

Пожалуйста, просветите меня, поскольку я не могу окунуться в эту тему.

Спасибо!

Ответ 1

Поток вызовов следующий:

  • Сервер получил http-соединение,
  • сервер проанализировал строку запроса и заголовки http, прочитал тело,
  • сервер заполняет окружение в соответствии с запросом,
  • сервер вызывает приложение, вызываемое с помощью environ и start_response в качестве аргументов,
  • вызываемые вызовом приложения start_response с состоянием ответа и заголовками ответов,
  • приложение возвращает тело ответа на сервер,
  • сервер отправляет HTTP-ответ клиенту.

Для вашей второй проблемы запрос/ответ - это интерфейс, определяемый протоколом wsgi (например, status = '200 OK', response_headers = [('Content-type', 'text/plain')]), а не тот же с http запросом/ответом.

В качестве ссылки вы можете просмотреть библиотечный модуль стойки wsgiref.