Что такое Common Gateway Interface (CGI)?

746

CGI - это общий интерфейс шлюза. Как следует из названия, это «общий» интерфейс шлюза для всего. Это так тривиально и наивно от названия. Я чувствую, что понял это, и чувствовал это каждый раз, когда сталкивался с этим словом. Но, честно говоря, я этого не сделал. Я все еще в замешательстве.

Я программист PHP с опытом веб-разработки.

запрос пользователя (клиента) на страницу ---> веб-сервер (-> встроенный интерпретатор PHP) ----> Серверный сценарий (PHP) ---> MySQL Server.

Теперь предположим, что мой PHP Script может получать результаты с сервера MySQL, сервера MATLAB и другого сервера.

Итак, теперь PHP Script является CGI? Потому что его интерфейс для веб-сервера и всех других серверов? Я не знаю. Иногда они называют CGI, технологию, а иногда называют CGI программой или каким-то другим сервером.

  • Что именно CGI?

  • В чем дело /cgi-bin/*.cgi? Что с этим? Я не знаю, для чего этот cgi-binкаталог на сервере. Я не знаю, почему у них есть расширения * .cgi.

  • Почему Perl всегда мешает. CGI & Perl (язык). Я также не знаю, что случилось с этими двумя. Я почти все время слышу эти два в сочетании "CGI & Perl". Эта книга является еще одним отличным примером программирования CGI с использованием Perl . Почему бы не "CGI Программирование с PHP / JSP / ASP"? Я никогда не видел таких вещей.

  • CGI Programming in C , меня сильно смущает. " в C " ?? Шутки в сторону?? Я не знаю, что сказать. Я просто запутался. " в C " ?? Это меняет все. Программа должна быть скомпилирована и выполнена. Это полностью меняет мой взгляд на веб-программирование. Когда я собираю? Как выполняется программа (потому что это будет машинный код, поэтому он должен выполняться как самостоятельный процесс). Как это общается с веб-сервером? IPC? и взаимодействие со всеми серверами (в моем примере MATLAB & MySQL) с помощью программирования сокетов? Я потерялся!!

  • Люди говорят, что CGI устарела и больше не используется. Это так? Какое последнее обновление?

Однажды я столкнулся с ситуацией, когда мне пришлось предоставить HTTP-запросу PUT доступ к веб-серверу (Apache HTTPD). Это длинная спина. Итак, насколько я помню, это то, что я сделал:

  1. Отредактировал файл конфигурации Apache HTTPD, чтобы веб-сервер передавал все запросы HTTP PUT некоторым put.php(мне пришлось написать этот PHP-скрипт)

  2. Реализуйте put.php для обработки запроса (сохраните файл в указанном месте)

Люди говорили, что я написал CGI Script. Серьезно, я понятия не имел, о чем они говорили.

  • Я действительно написал CGI Script?

Надеюсь, вы поняли, в чем заключается мое замешательство. (Потому что я сам не знаю, где я запутался). Я прошу вас, ребята, сделать ваш ответ максимально простым. Я действительно не могу понять любую причудливую техническую терминологию. По крайней мере, в этом случае.

РЕДАКТИРОВАТЬ:

Я нашел этот удивительный урок "CGI Programming Simple!" - CGI Tutorial , которая объясняет понятия в простейшем виде. После прочтения этой статьи вы можете прочитать статью « Начало работы с CGI-программированием на C», чтобы дополнить свое понимание реальными примерами кода. Я также добавил эти ссылки к этому руководству в статью Википедии: http://en.wikipedia.org/wiki/Common_Gateway_Interface

когти
источник
9
Я уже видел CGI, написанный на Cobol. Не катайся!
Люк М
@ Люк М. Интересно. Какой CGI вы имеете в виду (учитывая, что в LINQ существует raycaster ...)?
Джо
15
@claws: Люди, в основном из старой школы, будут называть ЛЮБОЙ код, независимо от способа выполнения, выполняемого через веб-сервер, CGI. На самом деле вы написали PHP-скрипт, который может выполняться или не выполняться по протоколу CGI. Ваша путаница, кажется, проистекает из неоднозначного значения CGI, протокола для выполнения кода и кода, который выполняется через протокол (который позже получил обобщение для обозначения любого кода, выполняемого в сети)
Vinko Vrsalovic
1
Еще в середине 90-х я написал пару сценариев CGI на HyperCard
Нил Дэвис,
@ Джо, я никогда не получал уведомления и сегодня, прочитав еще раз этот пост, я увидел твой вопрос. CGI были написаны на OpenVMS как независимые исполняемые файлы (без участия фреймворка или сторонних приложений ...)
Люк М

Ответы:

427

CGI - это интерфейс, который сообщает веб-серверу, как передавать данные в приложение и из приложения. Более конкретно, он описывает, как информация запроса передается в переменных среды (таких как тип запроса, удаленный IP-адрес), как тело запроса передается через стандартный ввод, и как ответ передается через стандартный вывод. Вы можете обратиться к спецификации CGI для деталей.

Чтобы использовать ваше изображение:

user (client) request for page ---> webserver ---[CGI]----> Server side Program ---> MySQL Server.

Большинство, если не все, веб-серверы могут быть настроены на выполнение программы как «CGI». Это означает, что веб-сервер после получения запроса перенаправит данные в определенную программу, установив некоторые переменные среды и упорядочив параметры через стандартный ввод и стандартный вывод, чтобы программа могла знать, где и что искать.

Основное преимущество заключается в том, что вы можете запускать ЛЮБОЙ исполняемый код из Интернета, учитывая, что и веб-сервер, и программа знают, как работает CGI. Вот почему вы можете писать веб-программы на C или Bash с помощью обычного веб-сервера с поддержкой CGI. Это и то, что большинство сред программирования могут легко использовать стандартный ввод, стандартный вывод и переменные среды.

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

Итак, отвечая на ваши вопросы:

Что именно CGI?

Смотри выше.

В чем дело с /cgi-bin/*.cgi? Что с этим? Я не знаю, для чего этот каталог cgi-bin на сервере. Я не знаю, почему у них есть расширения * .cgi.

Это традиционное место для программ cgi, многие веб-серверы поставляются с этим каталогом, предварительно настроенным для выполнения всех двоичных файлов в качестве программ CGI. Расширение .cgi обозначает исполняемый файл, который должен работать через CGI.

Почему Perl всегда мешает. CGI & Perl (язык). Я также не знаю, что случилось с этими двумя. Я почти все время слышу эти два в сочетании "CGI & Perl". Эта книга является еще одним отличным примером программирования CGI с использованием Perl. Почему бы не "Программирование CGI с помощью PHP / JSP / ASP". Я никогда не видел таких вещей.

Поскольку Perl является древним (старше, чем PHP, JSP и ASP, которые возникли, когда CGI был уже стар, Perl существовал, когда CGI был новым), и стал довольно известным как очень хороший язык для обслуживания динамических веб-страниц через CGI. В настоящее время существуют другие альтернативы для запуска Perl в веб-сервере, в основном mod_perl .

CGI Programming in C это меня сильно смущает. в C ?? Шутки в сторону?? Я не знаю, что сказать. Я просто в замешательстве. "В C" ?? Это меняет все. Программа должна быть скомпилирована и выполнена. Это полностью меняет мой взгляд на веб-программирование. Когда я компилирую? Как программа выполняется (потому что это будет машинный код, поэтому он должен выполняться как самостоятельный процесс.) Как он взаимодействует с веб-сервером? IPC? и взаимодействует со всеми серверами (в моем примере MATLAB & MySQL) с помощью программирования сокетов? Я заблудился !!

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

Они говорят, что CGI устарела. Его больше нет в использовании. Это так? Какое его последнее обновление?

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

Винко Врсалович
источник
24
Более конкретно, оно описывает, как информация запроса передается в переменных среды (таких как тип запроса, удаленный IP-адрес), как тело запроса передается через стандартный ввод, и как ответ передается через стандартный вывод. Вы можете обратиться к спецификации CGI ( hoohoo.ncsa.illinois.edu/cgi ) за подробностями.
ДАФ
3
Предположим, Server side Programна вашем рисунке мой PHP-скрипт. Итак, я никогда не занимался программированием на CGI? Потому что я никогда не писал ничего между веб-сервером и моим PHP-скриптом. Черт!! это убивает меня
когти
4
PHP по-прежнему в значительной степени основан на протоколе CGI, большая часть содержимого $ _SERVER прямо из спецификации CGI. И «программирование CGI» всегда означало программу, обрабатывающую запрос, а не реализацию самого протокола. Если бы вы объяснили, что вы делаете с PHP, пионеру веб-программирования 1993 года, он бы посчитал это продвинутой (хотя, возможно, глупой) формой CGI-программирования.
Майкл Боргвардт
5
@Michael: Но при запуске через mod_php это вообще не CGI (даже если на его основе). И я согласен, что CGI относится как к протоколу, так и к сценариям, выполняемым через него.
Винко Врсалович
2
@ Vinko Vrsalovic: если CGI - это интерфейс для исполнения Perl, C или других языков на веб-сервере, чем какой интерфейс используется PHP для работы в Apache ???????? и PHP входит в CGI спецификации?
Hardik
63

Что именно CGI?

Средство для веб-сервера, чтобы получить свои данные из программы (вместо, например, файла).

В чем дело с /cgi-bin/*.cgi?

Ничего страшного. Это просто соглашение.

Я не знаю, для чего этот каталог cgi-bin на сервере. Я не знаю, почему у них есть расширения * .cgi.

Сервер должен знать, что делать с файлом (то есть обращаться с ним как с программой, которую нужно выполнить, а не с чем-то, что нужно просто обработать). Наличие расширения .html указывает на использование типа содержимого text / html. Наличие расширения .cgi говорит ему, что нужно запускать его как программу.

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

Почему Perl всегда мешает.

Это не так. Perl был просто большим и популярным одновременно с CGI.

Я не использовал Perl CGI в течение многих лет. Я использовал mod_perl в течение долгого времени, и в эти дни склоняюсь к PSGI / Plack с FastCGI.

Эта книга является еще одним отличным примером программирования CGI с использованием Perl. Почему бы не "Программирование CGI с помощью PHP / JSP / ASP".

CGI не очень эффективен. Лучшие методы общения с программами с веб-серверов появились примерно в то же время, что и PHP. JSP и ASP - разные методы общения с программами.

CGI Programming in C это меня сильно смущает. в C ?? Шутки в сторону??

Это язык программирования, почему бы и нет?

Когда я собираю?

  1. Написать код
  2. Compile
  3. URL доступа
  4. Веб-сервер запускает программу

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

Он не должен выполняться как независимый процесс (вы можете писать модули Apache на C), но вся концепция CGI заключается в том, что он запускает внешний процесс.

Как это общается с веб-сервером? IPC?

STDIN / STDOUT и переменные среды - как определено в спецификации CGI.

и взаимодействие со всеми серверами (в моем примере MATLAB & MySQL) с помощью программирования сокетов?

Использование любых методов, которые вам нравятся и поддерживаются.

Говорят, что CGI обесценивается. Его больше нет в использовании. Это так?

CGI неэффективен, медленен и прост. Это редко используется, когда это используется, это потому, что это просто. Если производительность не имеет большого значения, простота того стоит.

Какое его последнее обновление?

1,1

Quentin
источник
1. Напишите код 2. Скомпилируйте 3. URL доступа 4. Веб-сервер запускает программу. || Но как веб-сервер узнает, где вы размещаете скомпилированную исполняемую программу? Как он узнает, какую исполняемую программу (среди них всех) запустить?
Pacerier
@Pacerier - так же, как он знает, какой статический файл отправить клиенту, если запрашивается статический файл.
Квентин
41

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

Он описывает, как определенные свойства этого запроса должны быть переданы в среду этой программы и как программа должна передать ответ обратно на сервер, и как сервер должен «завершить» ответ, чтобы сформировать действительный ответ на исходный HTTP-запрос.

Некоторое время CGI был интернет-драфтом IETF, поэтому срок его действия истек. Он истек без обновления, поэтому не было CGI «стандарт». Сейчас это информационный RFC, но как таковая документация является обычной практикой и сама по себе не является стандартом. rfc3875.txt , rfc3875.html

Программы, реализующие интерфейс CGI, могут быть написаны на любом языке, работающем на целевой машине. Они должны иметь возможность доступа к переменным среды и, как правило, к стандартному вводу, и они генерируют свой вывод на стандартном выводе .

Обычно использовались скомпилированные языки, такие как C, как языки сценариев, такие как perl, часто использующие библиотеки для облегчения доступа к среде CGI.

Одним из больших недостатков CGI является то, что для каждого запроса создается новая программа, поэтому поддержание состояния между запросами может быть серьезной проблемой производительности. Состояние может быть обработано в файлах cookie или закодировано в URL, но если оно становится большим, оно должно храниться где-то еще и кодироваться из кодированной информации URL или файла cookie. Каждый вызов CGI должен был бы затем перезагрузить сохраненное состояние из хранилища где-нибудь.

По этой причине и благодаря очень простому интерфейсу запросов и сеансов лучше интегрированные среды между веб-серверами и приложениями становятся все более популярными. Среды, такие как современная реализация php с apache, намного лучше интегрируют целевой язык с веб-сервером и предоставляют доступ к объектам запросов и сеансов, которые необходимы для эффективного обслуживания запросов http. Они предлагают гораздо более простой и богатый способ написания «программ» для обработки HTTP-запросов.

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

CB Bailey
источник
1
Беспокоить. Я начал писать это, когда других ответов не было, но меня назвали способом. Теперь это около № 8 в списке. У меня нет желания удалить его сейчас, я вернусь и удалю его позже.
CB Bailey
6
Эй .. Пожалуйста, не удаляйте это. Это говорит о некоторых вещах более ясно. Я нашел это полезным. Может быть, некоторые другие тоже могут найти это. :)
когти
1
Хорошо, я оставлю это немного. Вероятно, было бы хорошо, если бы кто-то включил какие-то «лучшие» отрывки в один из более полных ответов. Тогда мы могли бы получить более точный ответ.
CB Bailey
18

CGI указан в RFC 3875 , хотя это более поздняя «официальная» кодификация исходного документа NCSA . По сути, CGI определяет протокол для передачи данных о HTTP-запросе от веб-сервера в программу для обработки - в любую программу на любом языке. На момент написания спецификации (1993 г.) большинство веб-серверов содержали только статические страницы, «веб-приложения» были редкой и новой вещью, поэтому казалось естественным отделить их от «нормального» статического содержимого, такого как в cgi-binкаталог, кроме статического контента, и заканчивая им .cgi.

В то время здесь также не было выделенных «языков веб-программирования», таких как PHP, и C был доминирующим переносимым языком программирования - так много людей писали свои CGI-скрипты на C. Но Perl быстро оказался лучше подходящим для такого рода. и CGI на некоторое время стал почти синонимом Perl. Затем появились Java-сервлеты, PHP и многие другие, которые заняли большую часть рынка Perl.

Майкл Боргвардт
источник
Почему PHP - «выделенный язык веб-программирования»? PHP является языком общего назначения, и люди используют его также для приложений пользовательского интерфейса.
Pacerier
@Pacerier: он был разработан как язык программирования для создания веб-страниц, и для этого его используют 99,9% пользователей. Это даже в его названии . Утверждать что-либо еще - просто бессмысленное расчесывание волос. Если вы используете его для приложений пользовательского интерфейса, научных вычислений или встроенного программирования, хорошо, будьте счастливы, никто не говорит, что вы не можете.
Майкл Боргвардт
13

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

CGI - это просто способ общения веб-сервера и программы, ни больше, ни меньше. Здесь сервер управляет сетевым соединением и протоколом HTTP, а программа обрабатывает ввод и генерирует вывод, который отправляется в браузер. Сценарий CGI может быть в основном любой программой, которая может выполняться веб-сервером и следует протоколу CGI. Таким образом, CGI-программа может быть реализована, например, на C. Однако это крайне редко, поскольку C не очень хорошо подходит для этой задачи.

/cgi-bin/*.cgiэто просто путь, на котором люди обычно размещают свой CGI-скрипт. По умолчанию веб-сервер настроен на выборку CGI-сценариев по этому пути.

CGI-скрипт может быть реализован также на PHP, но все PHP-программы не являются CGI-скриптами. Если в веб-сервер встроен интерпретатор PHP (например, mod_php в Apache), то этап CGI пропускается посредством более эффективного прямого протокола между веб-сервером и интерпретатором.

Реализовали ли вы скрипт CGI или нет, зависит от того, как ваш скрипт выполняется веб-сервером.

Юха Сирьяля
источник
12

CGI, по сути, передает запрос любому интерпретатору, настроенному на веб-сервере - это может быть Perl, Python, PHP, Ruby, C почти все. Perl был самым распространенным в те дни, поэтому вы часто видите его в отношении CGI.

CGI не умер. На самом деле большинство крупных хостинговых компаний используют PHP как CGI, а не mod_php, потому что он предлагает конфигурацию на уровне пользователя и некоторые другие вещи, хотя он медленнее, чем mod_php. Ruby и Python также обычно запускаются как CGI. Ключевым отличием здесь является то, что серверный модуль работает как часть реального серверного программного обеспечения - где, как и в случае с CGI, он полностью находится за пределами сервера. Сервер просто использует модуль CGI, чтобы определить, как передавать и получать данные внешнему интерпретатору.

prodigitalson
источник
2
Не понижение, но большинство веб-установок Python я видел где на mod_wsgi или mod_python.
ChristopheD
Именно так большинство людей используют термин CGI-скрипт, но это не совсем то, что означает этот термин.
reinierpost
Вы говорите: интерпретатор, но C редко интерпретируется, и для CGI могут использоваться скомпилированные программы, такие как C-скомпилированные программы.
user34660
11

CGI - это механизм, посредством которого веб-сервер вызывает внешнюю программу для обработки запроса, а переменные среды и стандартный ввод используются для подачи данных запроса в программу. Точный язык, на котором написана внешняя программа, не имеет значения, хотя легче писать программы CGI на некоторых языках, чем на других.

Поскольку для сценариев CGI требуются разрешения на выполнение, httpd по умолчанию разрешает запускать только программы CGI в cgi-binкаталоге в целях безопасности (возможно, теперь ошибочных).

Большинство сценариев PHP запускаются в процессе веб-сервера через mod_php. Это не CGI.

CGI работает медленно, так как программа (и связанный с ней интерпретатор) должны запускаться по запросу. Современные альтернативы - встроенное выполнение, используемое mod_php, и длительные процессы, используемые FastCGI. У данного языка может быть свой способ реализации этих механизмов, поэтому обязательно поспрашивайте, прежде чем прибегать к CGI.

Игнасио Васкес-Абрамс
источник
@Ignacio Vazquez-Abrams: если интерфейс CGI создает новый процесс, каждый раз, когда он получает запрос на ресурс CGI, чем разница в выполнении между CGI и mod_php ??????? такое CGI и mod_php одинаковы ???? или это возможно, чтобы написать сценарии PHP, которые работают под интерфейсом CGI не под mod_php ???
Hardik
@Hardik: mod_php работает как часть HTTPd, который отвечает за свои собственные процессы.
Игнасио Васкес-Абрамс
что это за «внешняя программа»? это интерпретатор, если я запускаю php с php-fpm?
Slier
@slier: это произвольная программа, которая не является веб-сервером.
Игнасио Васкес-Абрамс
@ IgnacioVazquez-Abrams, так можно ли предположить, что это interpreterphp с php-fpm?
Slier
7

Возможно, вы хотите знать, что не является CGI, и ответом является МОДУЛЬ для вашего веб-сервера (если я полагаю, что вы используете Apache). И это большая разница, потому что CGI нужна и внешняя программа, поток, что угодно для создания экземпляра сервера приложений PERL, PHP, C, где при запуске в качестве МОДУЛЯ эта программа сама по себе является веб-сервером (apache).

Из-за всего этого возникает много проблем с производительностью, безопасностью, переносимостью. Но хорошо сначала узнать, что такое не CGI, понять, что это такое.

denica
источник
7

Пример из реальной жизни: сложная база данных, которую необходимо показать на веб-сайте. Поскольку база данных была разработана где-то в 1986 году (!), Большое количество данных было упаковано различными способами для экономии места на диске.

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

Есть три разумных решения:

  1. быстро и грязно: отправьте несортированные данные в PHP, отсортируйте их там. Очевидно, это очень дорогое решение, потому что это будет повторяться при каждом вызове страницы.
  2. написать плагин для механизма базы данных - но администратор не был готов разрешить запуск чужого кода на своем сервере, или
  3. Вы можете обрабатывать данные в программе (C, Perl и т. д.) и выводить HTML. Сама программа входит в / cgi-bin и вызывается веб-сервером (например, Apache) напрямую, а не через PHP.

CGI запускает ваш скрипт в Solution # 3 и выводит эффект в браузер. У вас есть скорость скомпилированной программы, гибкость языка лучше, чем SQL, и вам не нужно писать плагины для SQL-сервера. (Опять же, это пример, специфичный для SQL и C)

Михал Леон
источник
1
Лучший ответ для меня, я понял.
Даниэль Кац
7

CGI-скрипт - это консоль / оболочка. В Windows, когда вы используете окно «Командная строка», вы запускаете консольные программы. Когда веб-сервер выполняет сценарий CGI, он обеспечивает ввод в консоль / оболочку с использованием переменных среды или «стандартного ввода». Стандартный ввод подобен вводу данных в консоль / оболочку; в случае сценария CGI веб-сервер выполняет набор текста. Сценарий CGI записывает данные в «стандартный вывод», и этот вывод отправляется клиенту (веб-браузеру) в виде HTML-страницы. Стандартный вывод аналогичен выводу, который вы видите в программе консоли / оболочки, за исключением того, что веб-сервер читает его и отправляет.

Сценарий CGI может быть выполнен из браузера. URI обычно включает строку запроса, которая предоставляется сценарию CGI. Если метод «get», то строка запроса передается в CGI Script в переменной среды с именем QUERY_STRING. Если метод «post», то строка запроса передается в CGI Script с использованием стандартного ввода (CGI Script считывает строку запроса из стандартного ввода).

Раннее использование CGI-скриптов было для обработки форм. В начале HTML-формы HTML обычно имели атрибут «действие» и кнопку, обозначенную как кнопка «отправить». При нажатии кнопки отправки URI, указанный в атрибуте «action», будет отправлен на сервер с данными из формы, отправленными в виде строки запроса. Если в «действии» указан сценарий CGI, сценарий CGI будет выполнен, а затем будет создана HTML-страница.

RFC 3875 «Common Gateway Interface (CGI)» частично определяет CGI, используя C, как, например, говоря, что переменные окружения «доступны через подпрограмму библиотеки C getenv () или переменную environment».

Если вы разрабатываете сценарий CGI с использованием C / C ++ и используете для этого Microsoft Visual Studio, то вам следует разработать консольную программу.

user34660
источник
«CGI-скрипт» - это широкий термин, который также может включать исполняемые файлы.
71GA
6

CGI - это программа (или веб-API), которую вы пишете и сохраняете на сайте веб-сервера. CGI это файл.

Этот файл сидит и ждет на веб-сервере. Когда клиентский браузер отправляет запрос на веб-сервер для выполнения вашего файла CGI, веб-сервер запускает ваш файл CGI на сайте сервера. Входные данные для этой программы CGI, если таковые имеются, взяты из клиентского браузера. Выходы этой программы CGI отправляются в браузер.

На каком языке вы пишете CGI-программу? Другие посты уже упоминали c, java, php, perl и т. Д.

Лок Фам
источник
4

Идея, лежащая в основе CGI, заключается в том, что программа / скрипт (будь то Perl или даже C) получает ввод через STDIN(данные запроса) и выводит данные через STDOUT(эхо, printfоператоры).

Причина, по которой большинство PHP- скриптов не соответствуют требованиям, заключается в том, что они запускаются под модулем PHP Apache.

Натан Осман
источник