Что такое общий интерфейс шлюза (CGI)?

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

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

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

Теперь скажите, что мой 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 в C меня смущает. " в C"?? Шутки в сторону?? Я не знаю, что сказать. Я просто смущен. " в C"?? Это меняет все. Программа должна быть скомпилирована и выполнена. Это полностью меняет взгляд на веб-программирование. Когда я компилирую? Как программа запускается (потому что это будет машинный код, поэтому он должен выполняться как независимый процесс). Как он взаимодействует с веб-сервером? IPC? и взаимодействовать со всеми серверами (в моем примере MATLAB и MySQL) с использованием программирования сокетов? Я потерян!

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

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

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

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

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

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

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

EDIT:

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

Ответ 1

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

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

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

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

Ответ 2

Что такое CGI?

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

В чем дело с /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 на C меня очень смущает. в C?? Серьезно??

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

Когда я компилирую?

  • Введите код
  • Compile
  • URL доступа
  • Webserver запускает программу

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

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

Как он взаимодействует с веб-сервером? IPC?

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

и взаимодействовать со всеми серверами (в моем примере MATLAB и MySQL), используя сокет программирование?

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

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

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

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

1.1

Ответ 3

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 script, скорее зависит от интерпретации. Это, безусловно, работало над одним, но гораздо проще запускать php в качестве модуля, где интерфейс между script и сервером не является строго интерфейсом CGI.

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

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

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

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

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

Ответ 7

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

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

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

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

Ответ 8

Возможно, вам захочется узнать, что не является CGI, и ответ - это МОДУЛЬ для вашего веб-сервера (если я предполагаю, что вы запущен Apache). И ЧТО БОЛЬШАЯ НЕПОСРЕДСТВЕННОСТЬ, потому что CGI нуждается и внешняя программа, нить, что бы создать экземпляр сервера приложений PERL, PHP, C, где при запуске в качестве МОДУЛЯ эта программа является веб-сервером (apache) per se.

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

Ответ 9

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

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

Существует три разумных решения:

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

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

Ответ 10

Идея CGI заключается в том, что программа / script (будь то Perl или даже C) получает вход через STDIN (данные запроса) и выводит данные через STDOUT (echo, printf statements). Причина, по которой большинство скриптов php не квалифицируется, заключается в том, что они выполняются в модуле PHP Apache.

Ответ 11

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

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

Какой язык вы используете для написания программы CGI? Другие сообщения уже упоминают c, java, php, perl и т.д.

Ответ 12

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

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

Раннее использование скриптов CGI заключалось в обработке форм. В начале HTML формы HTML обычно имели атрибут "действие" и кнопку, обозначенную как кнопка "отправить". Когда кнопка отправки нажата, URI, указанный в атрибуте "действие" , будет отправлен на сервер с данными из формы, отправленной в виде строки запроса. Если "действие" указывает CGI script, тогда будет выполнен CGI script, а затем создаст HTML-страницу.

RFC 3875 "Общий интерфейс шлюза (CGI)" частично определяет CGI с использованием C, как и в том, что говорящие, что переменные среды "доступны через библиотечную процедуру C getenv() или переменную среду".

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