Понимание 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.
Ответ 2
Вы можете прочитать это, чтобы узнать больше об этом:
http://agiliq.com/blog/2013/07/basics-wsgi/