Шаг 152.
CGI-сценарии

    На этом шаге мы приведем общие сведения о сценариях CGI.

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

    Выбор языка зависит и от операционной системы Web-сервера. Большая часть имеющихся серверов предназначена для работы под управлением операционной системы UNIX. Учитывая эти соображения, мы можем заключить, что язык Perl, обладающий развитыми средствами обработки текста и создания сценариев, первоначально созданный для работы в ОС UNIX и перенесенный на множество других платформ, является наиболее подходящим средством создания сценариев CGI. Кроме того, CGI-программирование на языке Perl имеет поддержку в виде готовых модулей CPAN, свободно доступных в сети Internet.

    CGI-сценарий на языке Perl - это программа, имеющая свою специфику. Она, как правило, генерирует HTML-документ, посылаемый клиенту в виде ответа сервера. Ответ сервера, так же, как и запрос клиента, имеет определенную структуру. Он состоит из следующих трех частей:

  1. Строка состояния, содержащая три поля: номер версии протокола HTTP, код состояния и краткое описание состояния, например:
       НТТР/1.0 200 ОК   # запрос клиента обработан успешно
       HTTP/1.0 404 Not Found   # Документ по указанному адресу не существует
    
  2. Заголовки ответа, содержащие информацию о сервере и о возвращаемом HTML-документе, например:
      Date:   Mon,   20  Jul  2009  18:37:07  GMT  # Текущая дата и время
      Server:  Apache/1.3.6              # Имя и номер версии сервера
      Content-type: text/html            # Описывает медиа-тип  содержимого
    
  3. Содержимое ответа - HTML-документ, являющийся результатом выполнения CGI-программы.

    CGI-программа передает результат своей работы (HTML-документ) серверу, который возвращает его клиенту. При этом сервер не анализирует и не изменяет полученные данные, он может только дополнять их некоторыми заголовками, содержащими общую информацию (например, текущая дата и время) и информацию о самом себе (например, имя и версия сервера). Информация о содержимом ответа формируется CGI-программой и должна содержать как минимум один заголовок, сообщающий браузеру формат возвращаемых данных:

  Content-type: text/html


   Замечание. Информацию о заголовках можно найти в спецификации протокола HTTP. Мы же ограничимся еще одним примером. Если в качестве ответа клиенту посылается статический документ, например, подтверждение о получении заполненной формы, то неэффективно каждый раз создавать его заново. Лучше создать один раз и сохранить в файле. В этом случае CGI-сценарий вместо заголовка Content-type: media-type, описывающего формат данных, формирует заголовок Location: URL, указывающий серверу местонахождение документа, который следует передать клиенту.

    Заголовки отделяются от содержимого документа пустой строкой.

    Напишем простейший CGI-сценарий, посылающий пользователю HTML-страницу с приветствием

#! /usr/bin/perl
print "Content-type: text/html\n\n";
print "<html><head><title>Привет!</title></head>\n";
print "<body>\n";
print  "<h2>Bac приветствует CGI-сценарий!</h2>\n";
print  "</body></html>\n";
Текст этого примера можно взять здесь.

    Если поместить файл hello.cgi в каталог CGI-программ Web-сервера, а затем обратиться к нему из браузера, то браузер отобразит HTML-документ, созданный программой hello.cgi (рисунок 1).


Рис.1. Результат работы скрипта


   Замечание. Большинство Web-серверов по умолчанию предполагают, что файлы CGI-сценариев находятся в специальном каталоге, обычно называемом cgi-bin. Можно настроить сервер таким образом, чтобы все файлы, находящиеся в определенном каталоге, он воспринимал не как обычные документы, а как выполняемые сценарии. Можно также указать серверу, что все файлы с определенным расширением (например, .cgi) должны рассматриваться как CGI-сценарий. Когда пользователь открывает URL, ассоциированный с CGI-npoграммой, клиент посылает запрос серверу, запрашивая файл. Сервер распознает, что запрошенный адрес является адресом CGI-программы, и пытается выполнить эту программу. Подробности конфигурирования Web-серверов можно найти в соответствующей литературе и документации на конкретный сервер.

    На следующем шаге мы рассмотрим переменные среды CGI.




Предыдущий шаг Содержание Следующий шаг