Четвер, 25.04.2024, 22:57
Гость

Мішатронік

Мобільна версія | Додати у вибране  | Мій профіль | Вихід | RSS |
Меню сайту
Наше опитування
Java чи С++
Всього відповідей: 2
Статистика

Онлайн всього: 1
Гостей: 1
Користувачів: 0


Интерфейс CGI

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

Предположим, вы набираете в вашем браузере http://www.server.com/path/pict.gif

После введенного вами http-запроса сервер отсылает вам запрошенную картинку формата GIF (конечно, если она доступна по указанному адресу). Однако сказать, что вы запросили именно картинку нельзя. Почему? Дело в том, что файл pict.gif может не быть картинкой и даже вообще не существовать. Удивлены? А это ни что иное, как проявление CGI. Во-первых файл pict.gif и путь /path/ могут не существовать, поскольку администратор web-сервера может настроить алиасы (псевдонимы) для данного объекта на сервере. Во-вторых, файл pict.gif может сформировать CGI-программа "на лету", передав в браузер готовую картинку в формате GIF. Вот именно в таком случае были использованы средства CGI. Данный механизм абсолютно незаметен для пользователя ресурса, которому все равно, каким образом в его браузере появилась картинка - браузер передал файл или файл передала программа. Подобным образом можно передавать и html-документы, в таком случае они могут формироваться программой динамически и передаваться браузерам пользователей в ответ на их запросы.

Последний пункт особенно впечатляющ. Если вы прониклись его идеей, значит, вы поняли в общих чертах, что такое CGI. Как раз CGI обеспечивает все то, что выглядит так прозрачно для пользователя. Традиционно программы, работающие в соответствии с соглашениями CGI, называют сценариями — скорее всего из-за того, что в большинстве случаев их пишут на языках-интерпретаторах (например, на PHP или Perl ).

Таким образом, мы можем пользоваться мощным механизмом, который позволяет нам формировать документы "на лету".

Например, нам нужно, чтобы в каком-то документе проставлялись текущая дата и время. Разумеется, мы не можем заранее прописать их в документе — ведь в зависимости от того, когда он будет загружен пользователем, эта дата должна меняться. Зато мы можем написать сценарий (скрипт), который вычислит дату, вставит ее в документ и затем передаст его пользователю! Однако в построенной нами модели не хватает одного звена. Действительно, предположим, нам нужно, чтобы время в нашей странице проставлялось на основе часового пояса пользователя. Но как сценарий узнает, какой часовой пояс у региона, в котором живет этот человек (или какую-нибудь другую информацию, которую может предоставить пользователь)? Видимо, должен быть какой-то механизм, который позволит пользователю не только получать, но также и передавать информацию серверу (в данном случае, например, поправку времени в часах относительно Москвы). Это также обеспечивает CGI.

Взаимодействие сервера с браузером

Что в дейтсвительности происходит, когда мы вводит какой-либо URL в адресную строку браузера? Браузер извлекает из URL протокол (http) и адрес web-сервера. Далее браузер обращается к серверу с HTTP-запросом, в котором указано, что необходимо получить документ /path/somefile.html. Сервер просматривает содержимое каталога, и если находит документ somefile.html, то возвращает его браузеру в обыкновенном текстовом виде. Кроме текста сервер также возвращает тип документа (формат). Например, если web-сервер сообщает, что файл somefile.html является текстом, то в окне браузера мы увидим HTML-код. Но обычно сервер сообщает браузеру, что somefile.html является гипертекстовым документом (html), поэтому мы увидим нормальную html-страницу. Если запрашиваемый браузером документ не будет найден, то сервер отправит нам сообщение об ошибке.

Предназначение интерфейса CGI

Интерфейс CGI выполняет функции шлюза между различными программами, установленными на web-сервере, и браузерами пользователей. Когда браузер запрашивает определенный ресурс, web-сервер запускает программу, которая уже возвращает результат в браузер пользователя. Использование CGI-программ требуется, когда необходимо в браузере пользователя отобразить страницу, сформированную на основе каких-либо действий пользователя. Например, вы ввели в форму какие-либо данные, а на их основе формируется посылаемая вам страница. CGI-программа может также определить IP-адрес ващего компьютера в сети, и на основе его определить вашу страну, в итоге передав вам html-документ на вашем родном языке!

Механизм CGI перенаправляет вывод программы на web-сервер, а тот, в свою очередь, в браузер пользователя. С точки зрения программы нет ничего необычного - она лишь выводит информацию. Абсолютно любая программа не может быть CGI-прграммой, потому что перед своим выводом она должна вывести определенные заголовки сервера - указать хотя бы тип выводимой информации. Например, если мы хотим вывести картинку, мы должны отправить заголовок Content-type: image/gif. Если CGI-программе нужно передать параметры, то делается это очень просто - как и в случае с обычной программой. Например, нам нужно передать строку запроса name=Ivan&email=ivan@ivanov.com сценарию cgi.exe. Для этого необходимо вызвать программу cgi.exe с указанной строкой запроса: cgi.exe name=Ivan&email=ivan@ivanov.com.

Разделяют параметры с помощью символа &. Видели когда-нибудь на странице несколько полей ввода и переключателей, а под ними кнопку "Отправить"? Это и есть форма, с ее помощью
можно автоматизировать процесс передачи данных сценарию. Разумеется, сценарий опять же должен адекватно среагировать на эти параметры: провести разбор строки, создать переменные и.т.д. Следует обратить внимание на то, что все эти действия придется программировать вручную, если мы хотим воспользоваться языком Си. PHP разбирает параметры строки запроса самостоятельно.

Так вот, такой способ посылки параметров сценарию (когда данные помещаются в командную строку URL) называется методом GET. Фактически, даже если не передается никаких параметров (например, при загрузке статической страницы), все равно применяется метод GET. Однако, существует еще один распространенный способ — передача пераметров запроса методом POST. Методы передачи запросов мы рассмотрим ниже.

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

Вот так примерно и работает механизм CGI.

Способы создания CGI-сценариев (скриптов)

CGI-программы часто написаны на каком-нибудь интерпретируемом языке (PHP, Perl, Bash, Phyton и др.) Также можно написать программу на компилируемом языке, например C, который и будет обрабатывать данные пользователя. Приведем пример CGI-программы на C:

#include <time.h> // Нужна для инициализации функции rand()
#include <stdio.h> // Включаем поддержку функций ввода/вывода
#include <stdlib.h> // А это — для поддержки функции rand()
// Главная функция. Именно она и запускается при старте сценария.
void main(void) {
// инициализируем генератор случайных чисел
int Num; time_t t; srand(time(&t));
// в Num записывается случайное число от 0 до 9
Num = rand()%10;
// далее выводим заголовки ответа. Тип — html-документ
printf("Content-type: text/html\n");
// запрет кэширования
printf("Pragma: no-cache\n");
// пустой заголовок
printf("\n");
// выводим текст документа — его мы увидим в браузере
printf("<html><body>");
printf("<h1>Здравствуйте!</h1>");
printf("Случайное число в диапазоне 0-9: %d",Num);
printf("</body></html>");
}

Теперь мы можем откомпилировать данную программу в исполняемый (двоичный) файл cgi.exe и обращаться к нему, как к CGI-сценарию.

 

Форма входа
Пошук
Друзі сайту
Календар
«  Квітень 2024  »
ПнВтСрЧтПтСбНд
1234567
891011121314
15161718192021
22232425262728
2930

Єдина Країна! Единая Страна!