Именно для этого в каждый Perl-скрипт должна быть включена строка ‘print “Content-type: text/html\n\n”;’, иначе возникнет ошибочная ситуация.
Врезка «замечание»
В некоторых ситуациях, динамическая страница не генерируется, а всего лишь перенаправляется запрос на другой сервер или ресурс, изменением поля “Location:” в HTTP-заголовке.
Если результатом работы скрипта является двоичный файл солидных размеров, настоятельно рекомендуется включить в заголовок поле “Content-Length”, чтобы клиентское программное обеспечение могло корректно отображать бегунок прогресса. Сказанное выше справедливо и для обработки пользовательских запросов. Чтобы узнать длину переданных данных, скрипт должен считать переменную CONTENT_LENGTH.
Грубый пример, подпрограммы, читающей запрос пользователя, на языке Си может выглядеть так:
· fgets(*buffer,getevn(“CONTENT_LENGTH”),stdin);
Широко известный скрипт «test-cgi» [277], является не более чем тривиальным командным файлом для оболочки "sh” (UNIX), который выводит переменные окружения посредством команды «echo».
· #!/usr/bin/sh
· echo Content-type: text/plain
· echo
· echo SERVER_SOFTWARE = $SERVER_SOFTWARE
· echo SERVER_NAME = $SERVER_NAME
· echo GATEWAY_INTERFACE = $GATEWAY_INTERFACE
· echo SERVER_PROTOCOL = $SERVER_PROTOCOL
· echo SERVER_PORT = $SERVER_PORT
· echo REQUEST_METHOD = $REQUEST_METHOD
· echo HTTP_ACCEPT = "$HTTP_ACCEPT"
· echo PATH_INFO = $PATH_INFO
· echo PATH_TRANSLATED = $PATH_TRANSLATED
· echo SCRIPT_NAME = $SCRIPT_NAME
· echo QUERY_STRING = $QUERY_STRING
· echo REMOTE_HOST = $REMOTE_HOST
· echo REMOTE_ADDR = $REMOTE_ADDR
· echo REMOTE_USER = $REMOTE_USER
· echo CONTENT_TYPE = $CONTENT_TYPE
· echo CONTENT_LENGTH = $CONTENT_LENGTH
· SERVER_SOFTWARE = Apache/1.3.12 (Unix) mod_perl/1.22 AuthMySQL Plus/2.20.2 PHP/3.0.14 rus/PL29.4
· SERVER_NAME = kpnc.softclub.net
· GATEWAY_INTERFACE = CGI/1.1
· SERVER_PROTOCOL = HTTP/1.1
· SERVER_PORT = 80
· REQUEST_METHOD = GET
· HTTP_ACCEPT = image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword, */*
· PATH_INFO =
· PATH_TRANSLATED =
· SCRIPT_NAME = /cgi-bin/test-cgi
· QUERY_STRING = user=kpnc amp;pass=salt%20mine
· REMOTE_HOST = ppp-05.krintel.ru
· REMOTE_ADDR = 195.161.41.229
· REMOTE_USER =
· CONTENT_TYPE =
· CONTENT_LENGTH =
Врезка «замечание»
После сказанного становиться понятно, что термин «CGI-приложения» технически неграмотен. На самом деле следовало бы говорить «приложения, выполняющиеся на удаленной машине и взаимодействующие с клиентом через CGI-интерфейс».
Впрочем, правила CGI не столь строги и достаточно прозрачны, поэтому временами можно забывать какой посредник обеспечивает обмен данными.
Дополнение. Язык HTML
Протокол HTTP был разработан как одна из возможных (и, как оказалось впоследствии не самых лучших) реализацией языка гипертекста HTML (Hyper text Markup Language).
В середине восьмидесятых годов наиболее популярным способом распространения информации в Internet был… терминал telnet. Недостатком такого подхода была необходимость работы в реальном времени и изучения команд интерфейса удаленной программы (каждый раз разных).
Врезка «замечание»
«Легче один раз увидеть, чем сто раз услышать» говорит народная мудрость и это правильно. Получить представление обо всех достоинствах и неудобствах работы с telnet можно, подключившись к одному из перечисленных ниже серверов, которые до сих пор продолжают работать по старой схеме.
Большая BBS, посвященная математике
telnet://newton.dep.anl.gov(Имя пользователя “bbs”)
Библиотека Конгресса США
telnet://locis.loc.gov
Неизгладимые впечатления на поклонников первых игр «Sierra» оставляют виртуальные миры MUD (multi-user dungeon). Посетите один из следующих серверов.
«Аладон»
telnet://mud.donetsk.ua:9000
Sloth III
telnet://slothmud.org:6101
Первая программная реализация платформенно - независимого гипертекста появилась, по крайней мере, за год до изобретения WEB и предназначалась для комфортного просмотра локальных документов. В отличие от своих безвестно забытых ныне предшественников, новая разработка, обладала богатыми возможностями форматирования текста, что облегчало восприятие информации. Первый браузер появился в Женевской лаборатории ядерной физики в 1990 году и назывался «WWW».
Новинка долгое время оставалась незамеченной, и вплоть до 1994 года шли ожесточенные споры о перспективах развития WEB. Большинство не хотело отказываться от привычных в то время систем Gopher и telnet.
К тому же, HTML не обладал даже зачатками интерактивности, (то есть механизмами взаимодействия с пользователем). Станицы, хранящиеся на сервере, были полностью статичны, клиент мог лишь запросить одну из них на выбор.
Внедрение поддержки CGI шло медленно и неохотно. Первые реализации появились только в 1993 году, и еще долгое время оставались не более чем интересной экзотикой. Это легко понять, если вспомнить, что представляла собой Сеть в то время. «Большие компьютеры» под управлением UNIX предоставляли доступ к научным базам данных, конвертировать которые в HTML ни у кого не было ни возможности, ни желания. Существовала разветвленная сеть электронной почты и телеконференций. Для поиска информации и путешествий между серверами использовался симпатичный крот «Gopher», справляющийся с этим ничуть не хуже современных WEB-ориентированных поисковых систем. В WWW просто не было необходимости.
Немногим позже на рынке появилась фирма Netscape, которой было необходимо что-то выложить на алтарь, для «раскрутки» клиентов. Изучив рынок, она сделала ставку на молодое поколение пользователей, опытным путем осваивающим мышь, и с опаской поглядывающих на клавиатуру и черный экран telnet. В то время уже существовали графические операционные системы, и WEB выглядел привлекательным кандидатом для реализации визуального клиента, интуитивно-понятного начинающим пользователям (попробуйте, например, вообразить себе Visual Telnet).
Работать с браузером, а именно такое название получил HTTP-клиент, мог даже ребенок, и на фоне надвигающийся «юзерризации» его популярность была неизбежна. Благодаря этому, современный Internet на 90% состоит из красивой, но абсолютно бессодержательной графики и подобных средств повышения выразительности… Коммерческий подход заставил забыть всех одну простую истину - информация это в первую очередь не форма, а содержание. А вот с содержанием у большинства Internet - страничек приходится ой как туго. Но это не повод для пессимизма, если вспомнить, что с поиском дела обстоят еще хуже. Поневоле с ностальгией вспоминаешь «старые, добрые времена», когда серверов в мире было всего сеть, но каждый из них был полон информацией до отказа…