Передача данных аналогична использованию метода GET.
5) Диаграмма последовательностей
Действие 1
: Пользователь просматривает HTML-документ и встречает ссылку на страницу, содержащую форму (используется тэг
ехнология веб-дизайна CGI (аббревиатура от англ. Common
Gateway Interface) - в нашем лексиконе так именуется НЕ язык, как ошибочно
полагают многие, но именно серверная технология (т.наз. «шлюз, или шлюзовой
интерфейс)»). Действительно, для её реализации на практике требуется какой-либо
из языков программирования, но об этом мы побеседуем чуть ниже.
Сущность CGI такова: используется принцип передачи управления информацией
(данными) от одного объекта к другому. Для наглядности, в качестве примера
рассмотрим простейший из вариантов: в паре «сервер-клиент» пользователю
предложено заполнить некую форму (что такое формы, см. ); пользователь заполняет её, а затем нажимает кнопку с надписью
«Отослать» (или же с иной надписью, но нас интересует не надпись, а значение
этой кнопки, то есть её функция). Функцией же является вызов (активация) скрипта,
обслуживающего CGI, и передача ему управления теми данными, которые пользователь
в форму ввёл.
Непонятно?
Скажем другими словами: представьте, что на веб-странице есть некая форма. Вы
её заполнили. Пока вы заполняете форму, пока меняете её содержание и т.п.,
управление содержанием формы осуществляется программными средствами вашего
компьютера (браузера, выражаясь точнее). Но когда вы нажали кнопку «Отослать»,
происходит некоторое изменение (это обновилась страница): на
сервер , в распоряжение скрипта CGI, ушли данные из
заполненной формы.
Собственно, самому серверу «до лампочки», что именно вы ему пытаетесь
отослать. А вот скрипт CGI, вызванный (говорят «активированный») нажатием
кнопки, ждёт и принимает как раз этот блок информации, и с момента нажатия
кнопки вы уже ничего с отправленными данными поделать не можете: управление ими
перешло к CGI.
Почтовая форма на сайте
Цена упаковка для лекарств органайзеры для лекарств в интернет магазине по низкой цене.
В веб-дизайне эта технология применяется очень широко. Уже пять-семь лет
назад нельзя было представить себе приличного сайта, на котором не было бы
почтовых форм. А ведь с помощью форм проводятся масштабные многостраничные
опросы и прочее, и прочее...
Обработка данных
Гусь домашний цена за кг купить в интернет магазине свежее мясо домашнего.
Для обработки полученных из Сети данных, применяется исполняемый на сервере
скрипт. Мы не станем вдаваться в частности серверного программирования, скажем
лишь о том, что чаще всего такие скрипты выполнены на языках PERL (Practical
Extraction and Report Language, файлы имеют расширение.pi) или С (расширение.cgi).
В отличие от рассмотренной в предыдущей статье технологии JavaScript,
методика применения CGI обладает неоспоримым достоинством: поскольку вся
обработка информации выполняется на сервере, функционирование сайта ни в коей
мере не зависит от клиентского оборудования (браузер у пользователя может быть
любым, главное, чтобы он был корректным).
Вы наверняка сталкивались со страницами, которых ранее не существовало и которые были созданы по вашему запросу динамически – сформированы, как говорится, «на лету».
Например, любая книга отзывов предоставляет вам определенную форму, в которую вы добавляете свой отзыв, и затем, когда вы в следующий раз откроете эту страницу, она будет содержать новое сообщение.
Одна из технологий, позволяющая добавить динамическое содержание в Web-страницы, называется CGI. Она позволяет ассоциировать с тем или иным URL не просто статический документ, а программу, в результате работы которой могут быть сформированы данные в реальном времени.
Рассмотрим пример с предоставлением сведений о погоде. Метеорологическая сводка о погоде меняется каждый день, и ежедневно может создаваться новая статическая страница с прогнозом. Однако, если вы хотите предоставлять мгновенные данные, вы должны каждый раз генерировать новую страницу. Это может быть реализовано на основе CGI-технологии. В момент обращения на сервер на нем запускается CGI-программа, которая обращается к цифровому измерительному устройству и выдает сведения о температуре, давлении и т.д. Когда вы в очередной раз обратитесь на этот адрес, вы получите новые сведения.
Другой пример: когда вы заполняете некоторый запрос, например запрос в поисковой системе, то в ответ получаете результаты работы СGI-программы в виде набора искомых адресов.
CGI-программу можно представить как часть Web-сервера, которая запускается Web-сервером в реальном времени. Сервер передает запросы пользователя CGI-программе, которая их обрабатывает и возвращает результаты своей работы на экран пользователя (рис. 3). На большинстве Web-серверов CGI-механизм организован следующим образом: создается специальная поддиректория, в которой хранятся подобные программы, и администратор Web-сервера настраивает доступ к ней таким образом, чтобы файлы из нее не считывались, а запускались на выполнение. Результат работы программы отсылается браузеру в ответ на запрос. С точки зрения клиента нет никакой разницы, что находится по адресу данного URL – статический документ или CGI-программа. Браузер воспринимает информацию одинаково независимо от того, сформирована ли она «на лету» или речь идет о статической странице. Результат работы CGI-программы имеет тот же формат, что и статический документ.
Аббревиатура CGI наверняка попадалась вам в строке вашего браузера во время путешествия по Всемирной паутине, и вы, скорее всего, видели ссылку на /cgi-bin/ – директорию, в которой обычно и лежат cgi-программы. Множество интерактивных сервисов, таких как гостевая книга, форум и т.д., построены именно на cgi-программах.
Под термином «CGI» понимают не только программу, но и протокол. В этом смысле CGI – это стандартный для Web-сервера способ передать пользовательский запрос прикладной программе и получить данные назад для передачи их пользователю. Протокол CGI для пересылки данных между сервером и приложением является частью протокола HTTP.
Следует отметить, что если вы собираетесь разместить свою страницу на серверах бесплатного хостинга, то вполне возможно, что cgi-скрипты на этих серверах не поддерживаются.
Альтернативой CGI является технология компании Microsoft Active Server Page (ASP), построенная по тому же принципу: скрипт, включенный в Web-страницу, выполняется на сервере до того, как страница отсылается пользователю.
Существуют и другие технологии, работающие по тому же принципу.
Как видно на рис. 3, CGI-программа работает на стороне сервера.
Однако возможно также организовать динамические страницы за счет передачи на клиентский компьютер программ, которые генерируют динамическое содержание страниц уже на стороне клиента (рис. 4).
Рис. 4
Эта технология реализована следующим образом: активные документы хранятся на Web-серверах и скачиваются на локальный компьютер так же, как и статические страницы, но после того, как программа активного документа оказывается на локальном компьютере, она запускается и выполняет определенные вычисления на компьютере пользователя, опираясь на локальные вычислительные ресурсы. А результаты этих вычислений уже отображаются на экране. Соответственно скорость отображения данных на экране не зависит от скорости связи с удаленным сервером, поскольку вывод активного документа происходит только после его загрузки на локальный компьютер. Для создания активных документов могут использоваться различные технологии: приложения, написанные на JavaScript, Java-аплеты и элементы управления ActiveX.
CGI - Common Gateway Interface
является стандартом интерфейса (связи) внешней прикладной программы с информационным сервером типа HTTP, Web сервер.
Обычно гипертекстовые документы, извлекаемые из WWW серверов, содержат статические данные. С помощью CGI можно создавать CGI-программы, называемые шлюзами
, которые во взаимодействии с такими прикладными системами, как система управления базой данных, электронная таблица, деловая графика и др., смогут выдать на экран пользователя динамическую информацию.
Программа-шлюз запускается WWW сервером в реальном масштабе времени. WWW сервер обеспечивает передачу запроса пользователя шлюзу, а она в свою очередь, используя средства прикладной системы, возвращает результат обработки запроса на экран пользователя. Программа-шлюз может быть закодирована на языках C/C++, Fortran, Perl, TCL, Unix Schell, Visual Basic, Apple Script. Как выполнимый модуль, она записывается в поддиректорий с именем cgi-bin WWW сервера.
Передача данных шлюзам
Для передачи данных об информационном запросе от сервера к шлюзу, сервер использует командную строку и переменные окружения. Эти переменные окружения устанавливаются в тот момент, когда сервер выполняет программу шлюза.
Запросы для различных методов
Информация шлюзам передается в следующей форме:
имя=значение&имя1=значение1&..
где имя - имя переменной, и значение - ее реальное значение. В зависимости от метода, который используется для запроса, эта строка появляется или как часть URL (в случае метода GET), или как содержимое HTTP запроса (метод POST). В последнем случае, эта информация будет послана шлюзу в стандартный поток ввода.
На файловый дескриптор стандартного потока ввода посылается CONTENT_LENGTH байт. Так же сервер передает шлюзу CONTENT_TYPE (тип передаваемых данных). Сервер не обязан посылать символ конца файла после отсылки CONTENT_LENGTH байт данных и после того, как шлюз их прочитает.
Пример
Возьмем результат работы формы с методом POST (METHOD="POST") в качестве примера. Пусть получено 7 байт, закодированных примерно так:
В этом случае, сервер установит значение CONTENT_LENGTH равным 7 и CONTENT_TYPE в application/x-www-form-urlencoded. Первым символом в стандартном потоке ввода для шлюза будет "a", за которым будет следовать остаток закодированной строки.
Аргументы командной строки
Шлюз в командной строке от сервера получает:
Остаток URL после имени шлюза в качестве первого параметра (первый параметр будет пуст, если присутствовало только имя шлюза), и
- список ключевых слов в качестве остатка командной строки для скрипта поиска, или
- чередующиеся имена полей формы с добавленным знаком равенства (на четных позициях) и соответствующих значений переменных (на нечетных позициях).
Ключевые слова, имена полей формы и значения передаются раскодированными (из HTTP URL формата кодирования) и перекодированными в соответствии с правилами кодирования Bourne shell, так что шлюз в командной строке получит информацию в том виде, как она есть, без необходимости осуществлять дополнительные преобразования.