EvilsInterrupt
@EvilsInterrupt
System programming, Reversing Engineering, C++

Возможна ли работа web-приложения без CGI?

Насколько понял WEB-приложение работая где-либо на WEB-сервере должно как-то общаться с ним и эту роль «коммуникационного протокола» играет CGI. Почитав про CGI, FastCGI и немного про Django мой вопрос, который в сабже не был исчерпан.

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

P.S.:
Сильно не пинайте за такой вопрос. Для кого-то этот вопрос из разряда «капитанских», а для меня вэб-разработка новое направление, в котором я пока даже на уровень «новичка» не тяну ) Я только только приступил к постижению основ разработки WEB-приложений.
  • Вопрос задан
  • 5899 просмотров
Решения вопроса 1
@SleepingLion
Существует достаточно большое количество технологий решающих задачу коммуникации веб-приложения и клиента (связка веб-сервер+CGI только одна из них). Я могу выделить три класса таких технологий (кто-то может по другому их разделить, это не для спора):
— CGI-like, когда сервер перенаправляет запросы в экземпляр приложения, которое запускается как отдельный процесс в системе, и использует результат выполнения для отдачи клиенту;
— Fast-CGI-like, когда приложение работает как демон и обслуживает запросы веб-сервера;
— Сервера приложений, которые в собственном контексте выполняют код и обслуживают запросы.
Отдельно можно поставить комплексные сервера-приложения, которые сами выполняют все функции, как приложения, так и сервера.
Выбор технологии зависит от языка и уровня навыков.
CGI прост, но почти по всем параметрам уступает FCGI. Обе технологии используются, в основном, при работе с скриптовыми языками (Perl, PHP).
Сервера приложений — это преимущественно Java мир. Много специфики.
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
reaferon
@reaferon
Да запросто. Существует множество web-приложений, работающих на стороне клиента без использования CGI. Как правило, они работают на Javascript.
Для общения с web-сервером приложению также cgi не является обязательным. Обмен данными может осуществляться через XML, REST etc. Некоторым приложениям вообще свой сервер не нужен, если данные получаются со сторонних API-сервисов.
Ответ написан
Комментировать
VBart
@VBart
Такие вопросы на хабре задавать бесполезно. =)

Большинство ответивших написали местами полную чушь. Основная масса веб-программистов дальше своих фреймворков не вылезают, и у них в итоге полная каша в голове. Например, кто-то путает интерфейс (WSGI, Pump, WEB3, PSGI, Rack, CGI и т.д.), сервер приложений (uWSGI, php-fpm, Rack, Gunicorn, unicorn, flup, Apache в данной роли, и ещё тысячи их) и протокол (HTTP, uwsgi, FastCGI, SCGI, CGI, AJP, WebSocket, да много их). Кто-то путает протокол, способ его реализации и способ запуска интерпретатора.

Основное, что вам нужно знать, содержится в документации Django:
docs.djangoproject.com/en/dev/howto/deployment/

Ответом на ваш вопрос будет: да существует множество и каждый HTTP-сервер поддерживает целый набор протоколов для общения с сервером приложений. И сервера приложений могут поддерживать один или несколько протоколов, один или несколько интерфейсов. Некоторые HTTP-сервера умеют выполнять двойную роль, выступая и в роли сервера-приложения, предоставляя определенный интерфейс. А некоторые приложения сами содержат встроенный HTTP-сервер. Термин же «веб-сервер» слишком общий, и трактоваться может разными способами.
Ответ написан
TheHorse
@TheHorse
Браузер, отправляя запрос на сервер, отправляет запрос HTTP (протокол прикладного уровня основанный на TCP). На сервере его может принять любое приложение, которое работает с протоколом HTTP. В большинстве случаев это действительно веб-сервер в стандартном его понимании (apache, nginx, lIS...), который в зависимости от своих настроек и входящего запроса может либо передать запрос по CGI/FCGI на PHP/Python/любой другой язык, либо отработать запрос самостоятельно (выдать картинку, заблокировать...). Но это применимо в основном только для скриптовых языков и stateless приложений. Statefull веб-приложения (обычно С/С++/Java/Delphi/C#) часто используют встроенный веб-сервер, который обеспечивает коммуникацию по протоколу HTTP без стороннего внешнего веб-сервера (apache, nginx)… Более того, даже при использовании apache, nginx не обязательно использовать CGI/FCGI, насколько я знаю, можно использовать обычное прокси.
Ответ написан
Комментировать
@mithraen
Для того чтобы выполнять скрипты, web-серверу нужен некий протокол, чтобы взаимодействовать с этими скриптами. Таковых есть несколько:
— CGI
— FastCGI
— обычный HTTP
— встроенные в сервер API (для подключения модулей — как mod_perl и mod_php в апаче, или встроенная поддержка perl в nginx)
Ответ написан
@Eddy_Em
Запросто (вебсокеты). В этом случае и без веб-сервера можно обойтись.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы