5. Введение в сценарии
В предыдущих разделах данного руководства мы изучили основы языка HTML. Полученных
знаний вполне достаточно для представления разнообразной информации в Web, но не
для создания коммерческих сайтов. В данной главе мы пойдем немножко дальше, но
информация представленная здесь носит вводный характер. Для углубленного изучения
данных тем вам понадобятся дополнительные знания в области программирования и
операционных систем.
5.1. Сценарии выполняемые сервером
Для того чтобы понять, что такое серверные сценарии расмотрим (достаточно упрощенно)
схему взаимодействия Web-клиент/Web-сервер. При вводе пользователем, в адресной строке броузера,
URL необходимого ресурса или активизации гиперссылки, Web-броузер посылает http-запрос серверу:
[Метод запроса] [URL ресурса] [Заголовок]
Например для получения документа - doc1.htm запрос выглядит примерно так:
GET /doc1.htm HTTP/1.0
Результатом обработки запроса Web-сервером является http-ответ:
[Заголовок] [Код возврата] [MIME-заголовок] [Пустая строка-разделитель] [Тело ответа]
Например если наш предыдущий запрос Web-серверу прошел успешно, ответ будет примерно таким:
HTTP/1.0 200 ОК
Content-Type: text/html
<HTML>
содержимое документа doc1.htm
</HTML>
В результате данного взаимодействия мы получим от Web-сервера и увидим в окне Web-броузера
содержимое HTML-документа - doc1.htm. Такое взаимодействие позволяет получать и
просматривать любые статические ресурсы сервера, но как быть когда мы хотим большего. Например
мы хотим обрабатывать данные, введенные пользователем в формы на нашей Web-странице, или наоборот
отправить пользователю результаты работы прикладной программы в формате HTML. Все эти задачи
решаются при помощи сценариев выполняющихся на сервере.
Итак сценарий выполняющийся на сервере это программа написанная на одном из языков программирования,
которые поддерживются платформой Web-сервера. Какие они бывают, на чем и для чего пишутся ?
По большому счету сценарии можно разделить на две больших группы: сценарии внедряемые в
HTML-документы и CGI-сценарии.
Внедряемые сценарии
Сценарии внедряемые в HTML-документы, это фрагменты кода интерпретируемого языка программирования,
которые внедряются в документ при помощи специальных директив (можно сказать тегов).
Данные сценарии используются для динамического создания HTML-документов в зависимости от некоторых
условий (например от даты запроса).
Как правило HTML-документы, содержащие сценарии выполняемые сервером, должны иметь специальное расширение.
Web-сервер при запросе данного файла пользователем, первоначально проводит анализ содержимого файла и
выполняет обнаруженные сценарии, а затем объединяет результаты работы сценария с содержимым документа
и отправляет его Web-броузеру пользователя.
Технология внедрения сценария в документ и язык разработки зависят от типа платформы
Web-сервера и его настройки.
Для платформы NT/IIS существует реализация данной технологии под названием ASP
(Active Server Pages - Активные страницы сервера). Документы-активные страницы должны иметь
расширение ASP, сценарии пишутся на VBscript или Jscript, а их внедрение осуществляется при
помощи директивы <% код сценария %>.
Для платформы UNIX/Apache выбор средств гораздо больше, один из вариантов реализации данной
технологии это внедрение сценариев на языке PHP. Данные документы должны иметь расширение PHP, а
внедрение сценария в документ осуществляется при помощи директивы <?PHP код сценария ?>.
HTML-документ содержащий, внедряемый сценарий сервера, выглядит примерно так
(так он выглядит на Web-сервере, а в окне своего броузера вместо
кода сценария вы увидите результаты его работы) :
<HTML>
<HEAD>
<TITLE>Документ test.php со сценарием счетчика</TITLE>
</HEAD>
<BODY>
<H1 align=center>Добрый день !</H1>
<p>Вы являетесь <?PHP
$counter=0;
$filename = "count.dat";
$fp = @fopen($filename,"r");
if ($fp) {
$counter=fgets($fp,10);
fclose($fp);
}
$counter++;
print $counter;
$fp = fopen($filename,"w");
if ($fp) {
$counter=fputs($fp,$counter);
fclose($fp);
}
?> посетителем моего сайта !!!
<HR>
... данные страницы ....
</BODY>
</HTML>
CGI-сценарии
CGI-сценарии это приложения разработанные в соответствии со спецификацией CGI
(Common Gateway Interface). Данная спецификация описывает формат и общие правила
обмена данными между Web-сервером и внешним приложением. Для обработки потока
данных от клиента к Web-серверу и формирования обратного потока из результатов
работы приложения в спецификакции CGI определены следующие элементы:
- Переменные окружения - набор переменных среды, которые заполняются сервером
при запуске CGI-сценария и содержат информацию о служебных параметрах http-запроса,
который инициировал запуск данного сценария;
- Аргументы командной строки - используются для передачи CGI-сценарию входных
параметров, которые передаются как часть URL. Например: http://www.site.ru/cgi-bin/prog.pl?par1=val1;
- Стандартные потоки ввода/вывода - при передачи данных от сервера CGI-сценарию организуется
взаимодействие: поток STDOUT сервера с потоком STDIN сценария, а при обратной передаче:
поток STDOUT сценария взаимодействует с потоком STDIN сервера;
Для разработки CGI-сценариев, подходит множество языков программирования. Единственное
ограничение - это поддержка данного языка платформой Web-сервера. Поскольку CGI-сценарий
является внешним приложением (не внедряется в документ) для его разработки можно
использовать компилируемые языки программирования. Основные языки разработки CGI-сценариев следующие:
- Unix Shell (интерфейс командной строки Unix);
- Perl (интерпретатор);
- C, С++ (компилятор);
- Visual Basic (компилятор);
В общих чертах алгоритм разработки CGI-сценария выглядит следующим образом:
- Определение метода http-запроса.
Для этого необходимо считать значение стандартной переменной среды сервера REQUEST_METHOD,
в которой содержится тип http-запроса: GET, POST (например в языке С для доступа к переменным среды
используется функция - getenv("ИМЯ ПЕРЕМЕННОЙ") );
- Получение данных от сервера.
Для метода GET данные передаются как часть URL запроса. Часть URL
(остаток после имени сценария), содержащая передаваемые параметры, записываются
в переменную среды сервера QUERY_STRING (в данном случае действует ограничение на длину
передаваемого блока данных, обычно при записи URL усекается до 255 знаков).
Для получения данных необходимо считать значение переменной среды QUERY_STRING.
Например при отправке данных из формы HTML-документа на обработку сценарию-prg,
http-запрос будет выглядеть так:
GET http://www.site.ru/cgi-bin/prg?поле1=знач1&поле2=знач2...
А переменная среды QUERY_STRING = поле1=знач1&...&полеN=значN
Для метода POST данные передаются в STDIN сценария как тело http-запроса, в переменную
среды сервера CONTENT_LENGTH записывается количество символов входного потока, а в
переменную CONTENT_TYPE записывается MIME-тип передаваемых данных.
Для получения данных необходимо считать CONTENT_LENGTH символов из STDIN сценария.
Например при отправке данных из формы HTML-документа, на обработку сценарию-prg, http-запрос будет выглядеть так:
POST http://www.site.ru/cgi-bin/prg HTTP/1.0
Content-Type: application/x-www-form-urlencoded
поле1=знач1
...
&полеN=значN
- Декодирование полученные данных.
Для дальнейшего использования полученных данных необходимо выполнить их небольшое преобразование,
поскольку в полученной последовательности все пробелы заменяются символом +, а символы с десятичным
кодом более 128 заменяются на %ХХ, где ХХ-шестнадцатеричный код;
- Обработка данных.
Производится выполнение основных функций CGI-сценария, это может быть операции поиска в БД,
выполнение определенных расчетов на основе полученных данных, регистрация пользователя в БД,
обработка почты и многое другое;
- Формирование ответа в форме HTML-документа.
Производится динамическое создание HTML-документа содержащего результаты работы сценария
и вывод его в STDOUT сценария. В простейшем случае формируется документ содержащий уведомление
пользователя о выполнение сценария. Перед выводом в STDOUT, сценария документ необходимо снабдить
MIME-заголовком и разделительной строкой (пара символов CR) отделяющей заголовок от содержимоого тела ответа.
Например вот так:
Content-Type: text/html
<HTML>
Все ОK !
</HTML>
Реализации вышеуказанного алгоритма для различных платформ Web-серверов могут существенно
отличаться, но приведенные этапы создания сценария достаточно общие.
Вот пожалуй и все о сценариях сервера. Как я уже говорил, изложенный в этой главе материал,
носит ознакомительный характер. Я не являюсь экспертом в области разработки приложений Web-сервера
(моя основная работа с этим не связана). Информация данного раздела пригодится вам для
понимания общих принципов разработки приложений Web-клиент/Web-сервер.
Для углубленного изучения материала вам придется прикупить литературы по
конфигурированию ПО Web-серверов, программированию и сетевым протоколам. Много полезного можно
найти в Internet (благо ключевых слов, вы теперь знаете много: CGI, ASP, PHP...).
Рекомендую вам посетить следующие разделы нашего сайта:
|