Что такое WSGI и CGI на простом английском языке?

Каждый раз, когда я читаю WSGI или CGI, меня передергивает. Я пробовал читать об этом раньше, но на самом деле ничего не застряло.

Что на самом деле на простом английском?

Он просто направляет запросы на терминал и перенаправляет вывод?


person Blankman    schedule 08.02.2011    source источник
comment
stackoverflow .com / questions / 219110 /.   -  person Josh Lee    schedule 08.02.2011


Ответы (4)


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

CGI запускает сценарий как отдельный процесс для каждого запроса и использует переменные среды, stdin и stdout для «взаимодействия» с ним.

person Ignacio Vazquez-Abrams    schedule 08.02.2011
comment
WSGI! = Mod_wsgi. Ваш язык предполагает, что вы имеете в виду mod_wsgi, который является реализацией WSGI. Сам WSGI является просто спецификацией и может быть реализован множеством различных способов, в том числе поверх CGI. - person Graham Dumpleton; 08.02.2011
comment
@Graham: Вы хотите сказать, что нет других контейнеров WSGI, поддерживающих запуск приложений WSGI в этих режимах? - person Ignacio Vazquez-Abrams; 08.02.2011
comment
Технически можно сказать, что есть более тонкие вариации, чем только эти два, по крайней мере, в том, как запускаются процессы или как активируется код во встроенной системе. Так что нужно просто быть осторожным, обобщая вещи только на эти две категории. На грубом уровне вы можете сказать то, что у вас есть, но есть нечто большее, чем это, если вы хотите вникнуть в это. - person Graham Dumpleton; 09.02.2011
comment
@GrahamDumpleton, из любопытства, не могли бы вы объяснить, как можно реализовать WSGI поверх CGI? - person Mike Lee; 17.04.2016
comment
Прочтите спецификацию WSGI. Он показывает пример моста CGI / WSGI. python.org/dev/peps/pep-3333 / # the-server-gateway-side Для более надежной реализации см. github.com/GrahamDumpleton/cgi2wsgi Но если серьезно, то в целом вам следует избегать CGI. - person Graham Dumpleton; 17.04.2016
comment
последняя версия документа по состоянию на сентябрь 2018 г. docs.python.org/3.4/howto/webservers .html - person PirateApp; 08.09.2018

С совершенно отстраненной точки зрения, Бланкман, вот моя вводная страница для интерфейса шлюза веб-сервера:

ЧАСТЬ ПЕРВАЯ: ВЕБ-СЕРВЕРЫ

Веб-серверы обслуживают ответы. Они сидят и терпеливо ждут, а затем, совершенно без предупреждения, внезапно:

  • клиентский процесс отправляет запрос. Клиентский процесс может быть веб-сервером, ботом, мобильным приложением и т. Д. Это просто клиент
  • веб-сервер получает этот запрос
  • намеренное бормотание разные вещи (см. ниже)
  • Веб-сервер отправляет что-то клиенту
  • веб-сервер снова сидит без дела

Веб-серверы (по крайней мере, лучшие) ОЧЕНЬ хороши в этом. Они увеличивают и уменьшают обработку в зависимости от спроса, они надежно поддерживают разговоры с самыми ненадежными клиентами по действительно грубым сетям, и нам никогда не приходится об этом беспокоиться. Они просто продолжают служить.

Это моя точка зрения: веб-серверы - это всего лишь серверы. Они ничего не знают о контенте, ничего о пользователях, ничего, кроме того, как долго ждать и надежно отвечать.

Ваш выбор веб-сервера должен отражать ваши предпочтения по доставке, а не ваше программное обеспечение. Ваш веб-сервер должен отвечать за обслуживание, а не за обработку или логику.

ЧАСТЬ ВТОРАЯ: ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ (PYTHON)

Софт без дела не сидит. Программное обеспечение существует только во время выполнения. Программное обеспечение не очень приспособлено, когда дело доходит до неожиданных изменений в его среде (файлы не там, где они ожидают, параметры переименовываются и т. Д.). Хотя оптимизация должна быть центральным принципом вашего дизайна (конечно), само программное обеспечение не оптимизирует. Разработчики оптимизируют. Программное обеспечение выполняется. Программное обеспечение делает все, что описано в разделе «Умышленное бормотание» выше. Может быть что угодно.

Ваш выбор или дизайн программного обеспечения должны отражать ваше приложение, ваш выбор функций, а не ваш выбор веб-сервера.

Вот где традиционный метод компиляции на языках для веб-серверов становится болезненным. В конечном итоге вы вставляете код в свое приложение, чтобы справиться с физической средой сервера, или, по крайней мере, вам приходится выбирать подходящую библиотеку-оболочку для включения во время выполнения, чтобы создать иллюзию единообразия между веб-серверами.

ТАК ЧТО ТАКОЕ WSGI?

Итак, наконец, что такое WSGI? WSGI - это набор правил, состоящий из двух частей. Они написаны таким образом, что могут быть интегрированы в любую среду, приветствующую интеграцию.

Первая часть, написанная для стороны веб-сервера, говорит: «Хорошо, если вы хотите иметь дело с приложением WSGI, вот как программа будет думать при загрузке». Вот то, что вы должны сделать доступным для приложения, и вот интерфейс (макет), который вы можете ожидать от каждого приложения. Более того, если что-то пойдет не так, вот как приложение будет думать и как вы можете ожидать от него поведения.

Вторая часть, написанная для прикладного программного обеспечения Python, говорит: «Хорошо, если вы хотите иметь дело с сервером WSGI, вот как сервер будет думать, когда он свяжется с вами. Вот то, что вы должны сделать доступным для сервера, и вот интерфейс (макет), который вы можете ожидать от каждого сервера. Более того, если что-то пойдет не так, вы должны вести себя вот так, и вот что вы должны сообщить серверу.

Итак, у вас есть это - серверы будут серверами, а программное обеспечение будет программным обеспечением, и вот способ, которым они могут прекрасно ужиться, без необходимости делать какие-либо поправки на особенности другого. Это WSGI.

mod_wsgi, с другой стороны, является подключаемым модулем для Apache, который позволяет ему взаимодействовать с WSGI-совместимым программным обеспечением, другими словами, mod_wsgi является реализацией - в Apache - правил части первой правила книга выше.

Насчет CGI .... спросите у кого нибудь :-)

person Community    schedule 25.02.2011
comment
Вместо того, чтобы позволить этому ответу заканчиваться вопросом кого-нибудь еще, я бы хотел, чтобы кто-нибудь отредактировал этот ответ, включив CGI таким же образом. - person Bruno Bronosky; 16.09.2016
comment
«серверы будут серверами, а программное обеспечение будет программным» - «серверы будут с Марса, а программное обеспечение - с Венеры» :) - person Rahul; 29.09.2018
comment
cgi делает то же самое. Теперь поправьте меня. - person jim; 07.07.2021

Если вам непонятны все термины в этом разделе, и давайте посмотрим правде в глаза, это сбивающий с толку термин, насыщенный аббревиатурой, есть также хороший фоновый читатель в виде официальный python HOWTO, в котором обсуждаются CGI, FastCGI, WSGI и т. Д. Я хотел бы сначала прочитать это.

person Richard Boardman    schedule 29.03.2012
comment
Ссылка содержит самые подробные объяснения, которые я нашел до сих пор. Однако в нем недостаточно информации о том, как использовать FastCGI без WSGI, поэтому не дается объяснения, что такое WSGI. В остальном это было действительно здорово до MoinMoin, где он снова не соответствовал тому, что на самом деле WSGI по сравнению с интерфейсом FastCGI. Также у меня остается вопрос, когда я пытаюсь разработать без модели WSGI, используют ли mod_python, fastcgi традиционный интерфейс CGI. Кроме того, даже с CGI он действительно не объяснял, как вещи передаются через stdin, stdout, env и т. Д. С помощью программы CGI. - person huggie; 06.12.2020
comment
Чтение статьи из Википедии на CGI и PEP3333 многое проясняет. - person huggie; 06.12.2020

И CGI, и WSGI определяют стандартные интерфейсы, которые программы могут использовать для обработки веб-запросов. Интерфейс CGI находится на более низком уровне, чем WSGI, и включает в себя настройку сервером переменных среды, содержащих данные из HTTP-запроса, при этом программа возвращает что-то, отформатированное почти как простой ответ HTTP-сервера.

WSGI, с другой стороны, представляет собой специфичный для Python интерфейс немного более высокого уровня, который позволяет программистам писать приложения, не зависящие от сервера и которые могут быть обернуты в другие приложения WSGI (промежуточное программное обеспечение).

person Wooble    schedule 08.02.2011