Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции / !!! ИТ Архив / Лекции / 5_C G I / Лекция 2 - Обзор CGI.doc
Скачиваний:
36
Добавлен:
04.04.2013
Размер:
169.47 Кб
Скачать

Пересылка данных формы

В CGI-программу параметры пересылаются либо в самом URL, либо в теле текста запроса. Метод, применяемый для передачи параметров, определяется атрибутом method тега <form>. Метод GET предполагает пересылку данных в самом URL. При использовании этого метода браузер может инициировать HTTP-транзакцию следующим образом:

GET /cgi-bin/guestbook.pl?fname=Thyler&lname=Birden HTTP/1.0

При применении метода POST для передачи параметров используется тело HTTP-запроса. Вышеупомянутая транзакция по методу POST приобретет следующий вид:

POST /cgi-bin/guestbook.pl HTTP/1.0

[Здесь идут другие заголовки]

fname=Thyler&lname=Birden

При использовании любого способа передачи параметров для разделения пар переменная=значение используется амперсанд (&).

После выделения параметров из тела запроса или URL сервер передает пары переменная=значение в CGI-программу. Это делается либо посредством переменных среды UNIX, либо через стандартный ввод (STDIN). Если программа CGI вызывается методом GET, то параметры встроены в URL запроса, и сервер пересылает эти параметры в программу путем присваивания их переменной среды OUERY_STRING. Программа CGI затем извлекает параметры из этой переменной так же, как и при обработке любой другой переменной среды. Если программа CGI вызывается методом POST, то параметры встроены в тело запроса, и сервер передает текст тела в программу через стандартный ввод (STDIN).

Другие переменные среды, определяемые сервером для программ CGI, перечислены далее. В этих переменных хранится такая информация, как формат и объем входных данных, имя удаленной хост-машины, данные о пользователе и различная информация о клиентах. Кроме того, они содержат имя сервера, наименование протокола связи и имя программы, управляющей сервером.

Программе CGI нужно извлечь соответствующую информацию и затем обработать ее. Диапазон операций, которые программа CGI выполняет с извлеченной информацией, практически не ограничен. Программа может выдать анаграмму имени пользователя, сообщить, сколько раз в его имени встречается буква t, а то и просто включить это имя в список, который программист регулярно посылает на электронную биржу. Границы истинных возможностей программы известны только самому программисту.

Кодирование url

Перед началом передачи введенных в форму данных в программу CGI каждому заданному пользователем значению ставится в соответствие имя элемента формы (которое задано атрибутом name). Таким образом формируются пары ключ-значение. Например, если пользователь ввел в ответ на вопрос о возрасте число 30, то пара ключ-значение будет иметь вид age=30. Пары ключ-значение отделяются друг от друга в пересылаемых данных символом &.

Поскольку при использовании метода GET данные формы передаются как часть URL, они не могут включать пробелы и другие специальные символы, применение которых в URL не допускается, а также символы, которые в URL имеют другое назначение, например символ косая черта (/). (В целях совместимости это ограничение накладывается и при использовании метода POST.) Чтобы обеспечить выполнение указанных условий, Web-браузер производит над предоставленной пользователем информацией специальные операции кодирования.

Кодирование представляет собой замену пробелов и других специальных символов в строках запросов их шестнадцатеричньши эквивалентами. (По этой причине кодирование URL иногда называют шестнадцатеричным кодированием.) Предположим, пользователь заполняет и передает форму, содержащую дату его рождения в формате дд/мм/гггг (например, 20/05/2004). Символы "косая черта" в дате рождения относятся к числу специальных символов, которые не должны появляться в запросе клиента, адресованном программе CGI. После выполнения кодировки запрос будет выглядеть так, как показано в следующем примере:

POST /cgi-bin/birthday.pl HTTP/1.0

Content-length: 23

birthday=20%2F05%2F2004

Последовательность %2F представляет собой шестнадцатеричный эквивалент символа "/". Следует, также, отметить, что символ пробела кодируется особым образом: он может заменяться не только шестнадцатеричным кодом (%20), но и знаком плюс (+). В сценариях CGI необходимо предусматривать способ "декодирования" данных, которые были введены в форму данных и после этого закодированы клиентом