- •Обзор cgi
- •Пример взаимодействия с cgi
- •Пересылка данных формы
- •Кодирование url
- •Дополнительная информация о пути
- •Создание виртуальных документов
- •Пересылка бинарных данных
- •Переменные среды
- •Разбор параметров запроса
- •Поля пароля
- •Поля выбора файла
- •Селекторные кнопки
- •Кнопки передачи
- •Скрытые поля
- •Пример формы
Дополнительная информация о пути
Помимо строк запросов, пользователь может передавать в URL дополнительные данные, называемые дополнительной информацией о пути (extra path information). Сервер проверяет, где заканчивается имя программы CGI, все остальные данные считаются "дополнительными" и помещаются в переменную среды PATH_INFO. Следующая строка, которая служит для вызова сценария, включает дополнительную информацию о пути:
http://some.machine/cgi-bin/display.pl/cgi/cgi_doc.txt
Информация после текста display.pl является дополнительным путем. Можно воспользоваться и переменной PATH_TRANSLATED: ее значение включает, помимо значения переменной PATH_INFO, корневой каталог документов (DOCUMENT_ROOT).
Создание виртуальных документов
После завершения обработки полученной информации программа CGI должна создать новый документ, который будет предоставляться браузеру, или указать ссылку на существующий документ. В ОС UNIX программы посылают свою выходную информацию на стандартный вывод (STDOUT) как поток данных, состоящий из двух частей. Первая часть представляет собой полный или частичный HTTP-заголовок, в котором содержится (как минимум) описание формата возвращаемых данных (например HTML, ASCII-текст, GIF и т.д.). Пустая строка обозначает конец заголовка. Вторая часть — это тело выходных данных. В нем содержатся данные в формате, который задан в заголовке. Например:
Content-type: text/html
<html>
<head><title>Спасибо!</title></head>
<body><h1>Спасибо, что заполнили мою гостевую книгу!</h1>
</body></html>
В этом случае единственная строка заголовка выходных данных — Content-Type. Она содержит MIME-тип выходной информации, здесь — HTML (text/html). Эта строка существенно важна для каждой CGI-программы, поскольку она содержит информацию для браузера о том, как следует обрабатывать следующие за заголовком данные. Пустая строка отделяет заголовок от основного текста (который в данном случае имеет формат HTML, как это указано в заголовке.
Для Web-сервера не имеет значения, на каком языке написана программа CGI. В UNIX-системах наиболее популярным языком для написания CGI-программ являются PHP и Perl. Среди других языков, используемых в ОС UNIX, — С, C++, Tcl, Python. Программисты, работающие на компьютерах Macintosh, чаще пользуются языками Applescript и C/C++, а среди разработчиков, применяющих средства Microsoft Windows, популярны ASP, Visual Basic, Perl и C/C++. Для CGI-программирования можно использовать любой язык программирования, в котором предусмотрены средства получения данных с сервера и отправки их обратно.
Сервер возвращает результаты выполнения CGI-программы браузеру. При этом основной текст сервером никоим образом не модифицируется и не интерпретируется. Обычно сервер снабжает возвращаемые данные дополнительными заголовками, которые содержат такую информацию, как дата, имя и версия сервера и др.
Программы CGI могут формировать полный HTTP-заголовок. В этом случае сервер не дополняет возвращаемые данные какой-либо информацией. Ответ пересылается в том виде, в каком его выдала программа CGI.
Ниже приведен пример выходной информации программы, генерирующей виртуальный HTML-документ. Эта выходная информация включает полный HTTP-заголовок:
НТТР/1.0 200 OK
Date: Thursday, 20-May-04 11:12:13 GMT
Server: Apache/1.3.12
Content-type: text/html
Content-length: 2041
<html>
<head><title>Спасибо!</title></head>
<body><h1>Спасибо, что заполнили мою гостевую книгу!</h1>
</body></html>
Заголовок содержит имя протокола передачи, дату и время ответа, имя и версию сервера. (200 OK — это код состояния, генерируемый протоколом HTTP для сообщения о результатах выполнения запроса, который в данном случае завершился успешно). Кроме того, заголовок содержит тип и значение количества символов (последнее эквивалентно количеству байтов), содержащихся в выходной информации данных.
В результате после щелчка на кнопке “Отправить” пользователь увидит на экране ответ.