Вы наверняка сталкивались со страницами, которых ранее не существовало и которые были созданы по вашему запросу динамически – сформированы, как говорится, «на лету». — КиберПедия 

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

Вы наверняка сталкивались со страницами, которых ранее не существовало и которые были созданы по вашему запросу динамически – сформированы, как говорится, «на лету».

2017-11-22 261
Вы наверняка сталкивались со страницами, которых ранее не существовало и которые были созданы по вашему запросу динамически – сформированы, как говорится, «на лету». 0.00 из 5.00 0 оценок
Заказать работу

ТЕХНОЛОГИЯ CGI

 

Принципы работы CGI

CGI (Common Gateway Interface — Общий Шлюзовой Интерфейс) — это набор правил и соглашений, которые должны соблюдаться различными Web -серверами при выполнении Web -приложений.

Традиционное CGI -программирование.

Предположим, что в поле «Адрес» браузера вы ввели следующий URL-адрес http://www.server.ru/path/picture.gif

После этого сервер отобразил запрошенную картинку. Браузер отобразил картинку в формате GIF!

На самом деле файл picture.gif, как и путь path могут вообще не сушествовать. Дело в том, что администратор сервера может настроить псевдонимы (alias) для любых объектов на сервере. В результате вы можете так и не узнать действительное имя ресурса. При этом все производимые над объектом манипуляции не будут чем-либо отличаться. Просто вместо его имени будет использоваться псевдоним.

Самое интересное может заключаться в том, что файл picture.gif может быть вовсе не картинкой, а программой, которая передаст браузеру картинку в формате GIF. Вот это уже настоящее проявление CGI. Если первого эффекта мы могли достичь средствами сервера, то во втором случае без CGI нам просто не обойтись.

Получается, что мы получили мощный механизм для формирования документов «на лету». Кроме того, данный механизм абсолютно незаметен для пользователя, которому все равно, каким образом в его браузере появилась картинка —- браузер загрузил файл или файл передала ему программа.

Как происходит взаимодействие сервера с браузером?

Когда вводится какой-нибудь URL в строку адреса браузера, браузер извлекает из URL протокол (например, http) и имя сервера. Согласно полученной информации он обращается к указанному серверу. Протокол — это набор правил, согласно которым браузер будет общаться с Web -сервером (если используется протокол http).

Компьютер — это «железо», которое ничего не может сделать без программного обеспечения. На компьютере, к которому обращается браузер должна быть установлена программа -- Web -сервер, которая в действительности будет обслуживать запросы. Когда мы говорим сервер, должны иметь в виду программу, а не компьютер.

Браузер определил, что имя сервера есть в базе данных DNS, узнал его IP -адрес и, используя его, подключился к серверу. Сервер ждет команды от браузера. Браузер посылает запрос — что-то наподобие: «Мне нужен документ /path/docI.html». Сервер просматривает содержимое каталога /path, находит там файл docl.html и возвращает его браузеру, как обыкновенный текст. Кроме текста сервер также возвращает тип документа. Бразуер отображает документы согласно информации о типе, переданной сервером. Например, если сервер скажет, что файл docl.html является текстом, то в окне браузера мы увидим код HTML, но обычно сервер так не делает, и мы видим нормальную Web -страницу — с картинками и форматированием.

Если запрашиваемый документ не найден, сервер может возвратить документ, содержащий сообщение об ошибке или просто код ошибки, например, 500 — внутренняя ошибка сервера. В последнем случае, браузер, получив код ошибки, возвращает встроенное в него сообщение об этой ошибке.

Немного подробнее о CGI

Давайте разберемся, что именно происходит при запуске CGI -программы. CGI -программа, как уже упоминалось, это обычная программа, выводящая что-то. Механизм CGI перенаправляет вывод программы на Web -сервер, а тог, в свою очередь, в браузер пользователя. С точки зрения программы нет ничего необычного — она «думает», что выводит информацию на экран (stdout), даже не подозревая, что ее вывод будет перенаправлен и его увидит весь Интернет.

Правда, есть одно НО. Абсолютно любая программа не может быть CGI -программой, потому что перед своим выводом она должна вывести определенные заголовки сервера — указать хотя бы тип выводимой информации. Например, если мы хотим вывести картинку, мы должны отправить заголовок Content-type: image/gif.

Если CGI -программе нужно передать параметры, то делается это очень просто — как и в случае с обыкновенной программой. Например, нам нужно передать строку запроса came=Denis&ernail=denis@localhost сценарию cgi.exe, для этого нужно вызвать программу cqi.exe с параметром name = Denis Serna il=denis@ localhost: cgi.exe name = Denis&emaiI=denis@localhost

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

Обработать данные.

Вывести результат.

Завершить работу.

Передача данных пользователя в HTML, как вы уже знаете, реализуется с помощью форм. Рассмотрим небольшую форму, передающую имя пользователя.

Пример формы

<form action="/cgi/delete. cgi" method= "post">

<input type- "text" name- "user_name">

<input type- "submit" name- "go" value- "Go!">

< / form >

Если данную форму сохранить как файл в формате HTML, то в окне браузера вы увидите поле для ввода имени и кнопку для передачи параметра на сервер.


Рис. 3.1. Форма в окне браузера

Теперь давайте разберемся с самой формой. Когда пользователь введет имя и нажмет кнопку «Go», введенное имя будет передано сценарию delete. cgi в качестве параметра. Этот параметр будет называться user name. Метод передачи данных задается параметром method тэга <form>. Сейчас мы используем метод Get. После того, как будет нажата кнопка «Go», в поле Адрес браузера будет показано примерно следующее: http://localhost/cgi/delete.cgi?user_name=Denis

После имени узла и пути к CGI -программе, ей передаются введенные пользователем данные в виде параметров. Параметр при пересылке присоединяется к URL -адресу сценария через знак вопроса (?), Если параметров несколько, то они разделяются амперсантом (&): http://localhost/cgi/delete.cgi?user_name = Denis&sex=Male

Метод передачи определяет, как именно данные будут переданы сценарию. «На глаз» определить какой метод используется можно следующим образом. Метод, при котором передаваемые параметры отображаются и строке браузера, является методом GET. Если вы не видите передаваемых параметров, значит, используется метод POST.

После того, как параметры переданы сценарию, задача сценария состоит в том, чтобы выполнить разбор строки, то есть выделить пары имя_параметра =значение. Теперь рассмотрим оба эти метода подробнее.

Метод GET

Int main()

{

char *Remote_IP = getenv("REMOTE_ADDR");

char *Query_String = getenv("QUERY_STRING");

printf("Content-type: text/html\n\n");

printf ("<htmlxbody><hl>Привет!</hl><p>");

printf("Ваш IP: %s", Remote_IP);

printf("<р>Переданные вами параметры: %s",Query_String);

printf("</body></html>");

return 0; }

Сценарий сначала получает значение переменной окружения REMOTE_ADDR, а потом — значение переменной QUERY_STRING. Первая содержит значение IP -адреса удаленного пользователя, а вторая — строку переданных параметров. Для обращения к переменным окружения в Си используется функция getenvQ.

Затем сценарий выводит на стандартный вывод значения обеих переменных. Вот здесь и заключается огромная хитрость CGI. Если запустить программу просто в консоли, а не через браузер, то на экране мы увидим: Content-type: text/html <html><body><hl>Пpивeт!</h1><p>Ваш IP: <p>Переданные вами параметры: </body></html> Значения переменных окружения REMOTE_ADDR и QUERY_STRING будут недоступны, так как эту программу запустили мы сами, а не сервер. Сервер, запустив программу, считает все данные, которые программа выводит на стандартный вывод (stdout) и передает программе пользователя — браузеру.

Таким образом, если запустить программу, используя браузер, то в окне браузера мы увидим (при условии, что передали такие параметры: name=Denis&email=den@localhost): Привет! Ваш IP: 127.0.0.1 Переданные вами параметры: name=Denis&email=den@localhost

Программисту осталось сделать малое — только разобрать пары: параметр = значение. Он должен вручную (в смысле сами написать программу разбора) прочитать строку параметров, создать двумерный массив, содержащий имена параметров и их значения. Если понадобится имя параметра, необходимо перебрать все элементы массива в поисках нужного имени параметра. Язык РНР сам выполняет разбор параметров командной строки. Для обращения к значению параметра можно использовать имя параметра: echo "Ваше имя: $name"; echo "Email: $email";

Кроме того, как видно из этого сценария, РНР сам создает переменные, которые называются так же, как и переданные параметры. Это значит, что если сценарию передать параметр email, то в процессе работы сценария (а именно — сразу после его запуска) появится переменная $email, с которой можно будет работать, как с обыкновенной переменной.

Метод POST

Если используется метод POST, переданные сценарию параметры не отображаются в окне браузера. Да и сама передача происходит иначе: POST сценарий HTTP/ 1.О\n. Content-lenath:5\n\n Hello

Сам блок пересылаемых данных находится уже после маркера окончания. Благодаря этому достигается принципиальная особенность метода POST. Эта особенность заключается в том, что при такой передаче данных сервер никак их не интерпретирует, а сразу передает сценарию. Это означает, что сценарий будет запущен сразу же после окончания заголовков (\n\n) и сервер просто передает ему POST -данные. Потом сценарий должен самостоятельно прочитать определенное число байтов, указанное в заголовке Content-length (длина слова Hello составляет пять символов). Поэтому при использовании метода POST всегда необходимо указывать значение переменной Content-length.

Параметры, переданные методом POST, будут преобразованы в переменные, с которыми можно работать в своем сценарии.

Метод POST обычно используется для передачи больших объемом данных, например, при загрузке файлов на сервер или же. когда нужно скрыть значения передаваемых параметров от глаз пользователя. Дело в том, что передаваемые параметры и их значения не отображаются в окне браузера, как это происходит с методом GET.

Переменные окружения CGI

Мы уже знакомы с двумя переменными окружения — REMOTE_ADDR и QUERY_STRING. Переменные окружения в языке РНР можно использовать, как самые обыкновенные переменные:

echo "IP: $REMOTE ADDR";

echo "Параметры: $QUERY_STRING ";

Переменные окружения можно разбить на четыре большие группы:

* Формируемые сервером переменные.

* Специальные переменные сервера Apache.

* Переменные HTTP -полей запроса.

* Переменные SSL -соединения (защищенного соединения).

Первые три группы представлены в таблице

 

Таблица 1.1. Формируемые сервером переменные

Переменная Описание
AUTH_TYPE Используемая схема аутентификации
CONTENT_LENGTH Длина содержимого
CONTENT_TYPE М1МЕ-тип содержимого, например text/html
GATEWAY_INTERFACE Версия CGI
PATH_INFO НТТР-путь к сценарию
PATH_TRANSLATED Полный путь к сценарию
REMOTE_ADDR 1Р-адрес запрашивающего компьютера-клиента
REMOTE_HOST Доменное имя запрашивающего компьютера-клиента
REMOTE_PORT Доменное имя запрашивающего компьютера
REMOTE_USER Порт, закрепленный за браузером для получения ответа от сервера
QUERY_STRING Имя пользователя прошедшего аутентификацию
SERVER_ADDR Строка переданных серверу параметров
SERVER_NAME 1Р-адрес сервера
SERVER_PORT Доменное имя сервера
SERVER_PROTOCOL ТСР-порт Wеb-сервера. Обычно 80
SERVER_SOFTWARE Версия протокола НТТР
SERVER_NAME Программное обеспечение сервера
SCRIPT_NAME НТТР-путь к сценарию


Таблица 1.2. Специальные переменные сервера Apachе

Переменная Описание
DOCUMENT_ROOT Физический путь к корневому WWW-каталогу сервера
SERVER_ADMIN Адрес электронной почты администратора сервера
SERVER_SIGNATURE Подпись серверов


Таблица 1.3. Переменные НТТР-полей запроса

HTTP_HOST Имя вертуального хоста, которому адресован запрос
HTTP_USER_AGENT Програмное обеспичение вертуального хоста
HTTP_ACCEPT Список поддерживаемых клиентов типов содержимого
HTTP_ACCEPT_LANGUAGE Список поддежииваемых языковв в порядке предпочтения
HTTP_ACCEPT_ENCODING Список поддежииваемых методов сжатия
HTTP_ACCEPT_CHARSET Список поддежииваемых кодировок
HTTP_CONNECTION Тип соединения(если после ответа на запрос не нужно разрывать соединение, и если после ответа на запрос нужно закрыть соединение)
HTTP_REFERER В этом поле браузер передает URL-реурса, который ссылается на наш сервер
HTTP_X_FORWARDED_FOR Если пользователь работает через прокси сервер, то в этом поле будет 1Р-адресузла, обратившегося к прокси серверу. Еслт данное поле уже содержит значение то новое значение будет добавленно через запятую

 

ТЕХНОЛОГИЯ 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-программа работает на стороне сервера.

Рис.3.

Однако возможно также организовать динамические страницы за счет передачи на клиентский компьютер программ, которые генерируют динамическое содержание страниц уже на стороне клиента (рис. 4).

Рис. 4

Эта технология реализована следующим образом: активные документы хранятся на Web-серверах и скачиваются на локальный компьютер так же, как и статические страницы, но после того, как программа активного документа оказывается на локальном компьютере, она запускается и выполняет определенные вычисления на компьютере пользователя, опираясь на локальные вычислительные ресурсы. А результаты этих вычислений уже отображаются на экране. Соответственно скорость отображения данных на экране не зависит от скорости связи с удаленным сервером, поскольку вывод активного документа происходит только после его загрузки на локальный компьютер. Для создания активных документов могут использоваться различные технологии: приложения, написанные на JavaScript, Java-аплеты и элементы управления ActiveX.

 

Принципы работы CGI

CGI (Common Gateway Interface — Общий Шлюзовой Интерфейс) — это набор правил и соглашений, которые должны соблюдаться различными Web -серверами при выполнении Web -приложений.

Традиционное CGI -программирование.

Предположим, что в поле «Адрес» браузера вы ввели следующий URL-адрес http://www.server.ru/path/picture.gif

После этого сервер отобразил запрошенную картинку. Браузер отобразил картинку в формате GIF!

На самом деле файл picture.gif, как и путь path могут вообще не сушествовать. Дело в том, что администратор сервера может настроить псевдонимы (alias) для любых объектов на сервере. В результате вы можете так и не узнать действительное имя ресурса. При этом все производимые над объектом манипуляции не будут чем-либо отличаться. Просто вместо его имени будет использоваться псевдоним.

Самое интересное может заключаться в том, что файл picture.gif может быть вовсе не картинкой, а программой, которая передаст браузеру картинку в формате GIF. Вот это уже настоящее проявление CGI. Если первого эффекта мы могли достичь средствами сервера, то во втором случае без CGI нам просто не обойтись.

Получается, что мы получили мощный механизм для формирования документов «на лету». Кроме того, данный механизм абсолютно незаметен для пользователя, которому все равно, каким образом в его браузере появилась картинка —- браузер загрузил файл или файл передала ему программа.


Поделиться с друзьями:

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.061 с.