Интерфейс CGIТермин CGI (Common Gateway Interface — Общий шлюзовой интерфейс) обозначает набор соглашений, которые должны соблюдаться Web-серверами при выполнении ими различных Web-приложений. Фактически, до недавнего времени все Web-программирование представляло собой программирование CGI-приложений. В последнее время ситуация изменилась. И хотя CGI все еще остается негласным стандартом для Web-приложений, механизм работы CGI-программ несколько обновился. Предположим, вы набираете в вашем браузере http://www.server.com/path/pict.gif После введенного вами http-запроса сервер отсылает вам запрошенную картинку формата GIF (конечно, если она доступна по указанному адресу). Однако сказать, что вы запросили именно картинку нельзя. Почему? Дело в том, что файл pict.gif может не быть картинкой и даже вообще не существовать. Удивлены? А это ни что иное, как проявление CGI. Во-первых файл pict.gif и путь /path/ могут не существовать, поскольку администратор web-сервера может настроить алиасы (псевдонимы) для данного объекта на сервере. Во-вторых, файл pict.gif может сформировать CGI-программа "на лету", передав в браузер готовую картинку в формате GIF. Вот именно в таком случае были использованы средства CGI. Данный механизм абсолютно незаметен для пользователя ресурса, которому все равно, каким образом в его браузере появилась картинка - браузер передал файл или файл передала программа. Подобным образом можно передавать и html-документы, в таком случае они могут формироваться программой динамически и передаваться браузерам пользователей в ответ на их запросы. Последний пункт особенно впечатляющ. Если вы прониклись его идеей, значит, вы поняли в общих чертах, что такое CGI. Как раз CGI обеспечивает все то, что выглядит так прозрачно для пользователя. Традиционно программы, работающие в соответствии с соглашениями CGI, называют сценариями — скорее всего из-за того, что в большинстве случаев их пишут на языках-интерпретаторах (например, на PHP или Perl ). Таким образом, мы можем пользоваться мощным механизмом, который позволяет нам формировать документы "на лету". Например, нам нужно, чтобы в каком-то документе проставлялись текущая дата и время. Разумеется, мы не можем заранее прописать их в документе — ведь в зависимости от того, когда он будет загружен пользователем, эта дата должна меняться. Зато мы можем написать сценарий (скрипт), который вычислит дату, вставит ее в документ и затем передаст его пользователю! Однако в построенной нами модели не хватает одного звена. Действительно, предположим, нам нужно, чтобы время в нашей странице проставлялось на основе часового пояса пользователя. Но как сценарий узнает, какой часовой пояс у региона, в котором живет этот человек (или какую-нибудь другую информацию, которую может предоставить пользователь)? Видимо, должен быть какой-то механизм, который позволит пользователю не только получать, но также и передавать информацию серверу (в данном случае, например, поправку времени в часах относительно Москвы). Это также обеспечивает CGI. Взаимодействие сервера с браузером Что в дейтсвительности происходит, когда мы вводит какой-либо URL в адресную строку браузера? Браузер извлекает из URL протокол (http) и адрес web-сервера. Далее браузер обращается к серверу с HTTP-запросом, в котором указано, что необходимо получить документ /path/somefile.html. Сервер просматривает содержимое каталога, и если находит документ somefile.html, то возвращает его браузеру в обыкновенном текстовом виде. Кроме текста сервер также возвращает тип документа (формат). Например, если web-сервер сообщает, что файл somefile.html является текстом, то в окне браузера мы увидим HTML-код. Но обычно сервер сообщает браузеру, что somefile.html является гипертекстовым документом (html), поэтому мы увидим нормальную html-страницу. Если запрашиваемый браузером документ не будет найден, то сервер отправит нам сообщение об ошибке. Предназначение интерфейса CGI Интерфейс CGI выполняет функции шлюза между различными программами, установленными на web-сервере, и браузерами пользователей. Когда браузер запрашивает определенный ресурс, web-сервер запускает программу, которая уже возвращает результат в браузер пользователя. Использование CGI-программ требуется, когда необходимо в браузере пользователя отобразить страницу, сформированную на основе каких-либо действий пользователя. Например, вы ввели в форму какие-либо данные, а на их основе формируется посылаемая вам страница. CGI-программа может также определить IP-адрес ващего компьютера в сети, и на основе его определить вашу страну, в итоге передав вам html-документ на вашем родном языке! Механизм CGI перенаправляет вывод программы на web-сервер, а тот, в свою очередь, в браузер пользователя. С точки зрения программы нет ничего необычного - она лишь выводит информацию. Абсолютно любая программа не может быть CGI-прграммой, потому что перед своим выводом она должна вывести определенные заголовки сервера - указать хотя бы тип выводимой информации. Например, если мы хотим вывести картинку, мы должны отправить заголовок Content-type: image/gif. Если CGI-программе нужно передать параметры, то делается это очень просто - как и в случае с обычной программой. Например, нам нужно передать строку запроса name=Ivan&email=ivan@ivanov.com сценарию cgi.exe. Для этого необходимо вызвать программу cgi.exe с указанной строкой запроса: cgi.exe name=Ivan&email=ivan@ivanov.com. Разделяют параметры с помощью символа &. Видели когда-нибудь на странице несколько полей ввода и переключателей, а под ними кнопку "Отправить"? Это и есть форма, с ее помощью Так вот, такой способ посылки параметров сценарию (когда данные помещаются в командную строку URL) называется методом GET. Фактически, даже если не передается никаких параметров (например, при загрузке статической страницы), все равно применяется метод GET. Однако, существует еще один распространенный способ — передача пераметров запроса методом POST. Методы передачи запросов мы рассмотрим ниже. Если программа предназначена для CGI, то нужно позаботиться о взаимодействии с сервером. Простейшее взаимодействие заключается в том, что программист должен знать информацию о сервере. Данная информация передается с помощью переменных окружения. Вот так примерно и работает механизм CGI. Способы создания CGI-сценариев (скриптов) CGI-программы часто написаны на каком-нибудь интерпретируемом языке (PHP, Perl, Bash, Phyton и др.) Также можно написать программу на компилируемом языке, например C, который и будет обрабатывать данные пользователя. Приведем пример CGI-программы на C:
Теперь мы можем откомпилировать данную программу в исполняемый (двоичный) файл cgi.exe и обращаться к нему, как к CGI-сценарию. |