CGI это просто функция обработки данных из формы на сервере?
Добрый день, читаю книгу и идёт речь в ней о cgi, но что-то особенного, что требует нового названия, я в этом не увидел.
CGI это просто тот набор функций(кода), который мы применяем для обработки данных на сервере, которые поступили от клиента через форму или еще как-либо?
Ingernirated, Вы не на сервере напишете обработчик. Сервер в данном случае - это веб-сервер (apache, nginx, ...). Вы напишете обработчик, например на php. Вот интерпретатор php и является CGI "клиентом". А ваш скрипт - это только часть "клиента", которая собственно в самом протоколе CGI не участвует, она получает подготовленные php данные запроса (полученные по CGI) и отдает интерпретатору сформированный ответ. Интрепретатор уже сам отдает ответ по протоколу CGI веб-серверу.
На самом деле протокол CGI простой - на стандартный ввод поступает запрос, на стандартный вывод ответ. Но вы в своем скрипте не занимаетесь парсингом стандартного ввода - это делает интерпретатор за вас...
res2001, т.е. cgi только для того, чтобы не писать сервер на питоне, а просто взять nginx и лишь с помощью одного из языков написать для него обработчик запросов?
Ingernirated, Да. CGI снимает с обработчика проблему сетевого взаимодействия, которая лежит на веб-сервере. И как правильно писал vaut для многих интерпретаторов сейчас реализованы модули для веб-серверов и они уже не используют CGI. Вот нашел популярную статью на эту тему.
PS. CGI в современном мире почти не используется. FastCGI тоже.
Правильнее использовать apache+mod_php или аналогичное решение для вашего стека технологий.
Это чисто питоновская фишка или что?
Например, я в своём коде никогда его ещё не использовал и если бы не книга, то и не узнал бы.
В чём его смысл, если мы и так получив данные можем всё на сервере спокойно обработать без cgi?
Ingernirated, нет это фишка из того времени когда для веб серверов был баш и perl. А питона и php еще не было.
Ну и сейчас этот интерфейс позволит обрабатывать запросы на любом языке программирования без дополнительного геморроя.
как написал @res2001
CGI это протокол (интерфейс), по которому общается веб сервер с программой обработчиком запросов.
vaut, например тот же нод, который на Си написан, из-за его современности ему это в принципе не надО, как и nginx сам?
Только ветераны, которым лень писать сервер на питоне, используют апач и только свой обработчик?
Для таких вещей как php, есть готовые встроенная библиотека, поэтому обработчик на php может работать быстрее (просто за счет того, что интерпретатор уже в памяти в виде библиотеки, и передача данных из веб-сервера в обработчик и обратно выполняется быстрее).
А протокол CGI позволяет писать обработчик на чем угодно, лишь бы оно могло запуститься на операционке, где крутится твой веб-сервер.
CGI — это стандарт. как и WSGI, например.
Ты — человек, но в тебе что-то особенного, что требует нового названия нет. Можно было бы назвать "сущность".
А HTTP — это протокол. Но можно было бы его обозвать "набором байтов, которые ходят туда-сюда".
Ingernirated,
А сервер твой сразу HTTP ответ отдает браузеру пользователя?
А сколько он запросов выдерживает?
А что так плохо? Статический контент как он у тебя отдает?
А с nginx лучше?
А как ты подключил свой сервер к nginx? Просто http кэширующий прокси на той же машине настроил?
А чем это тебе грозит? Небось через весь сетевой стек твои пакеты бегут туда-обратно, еще и порт занимают? Начерта тебе все паковать по пакетам, а потом их распаковывать? Прям почту россии из балкона на кухню устроил.
Почему бы сразу не отдавать ответ веб-серверу?
Наверное надо как-то договориться с nginx\apache\lighthttpd\веб-сервером от соседа Васяна как он будет у тебя запрашивать контент и как твоя программа будет ему отвечать, что передать пользователю.
Модуль mod_{твой_язык} под твой веб-сервер еще не написали? Васян вон вообще все презирает кроме си. Под твой язык точно никогда не напишет модуль.
Что же делать? Исходники трогать не охота, это ж на си, а ты веб-макака, тяжко будет, поддержка совсем неподъемной станет на каждую программу то, да под каждый сервер, да и нету у тебя исходников никаких. И выполняться твоя программа хочет в другом окружении и с другими правами. Вот бы протокол какой-нибудь, да общеизвестный. Общий. Интерфейс бы какой. Для шлюза.