Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

Назначение интерфейса CGI. CGI приложения

Лекция



Привет, Вы узнаете о том , что такое назначение интерфейса cgi cgi приложения, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое назначение интерфейса cgi cgi приложения , настоятельно рекомендую прочитать все из категории Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend) .

На заре  Интернета, разработчикам нужно было найти способ для запуска сценариев на сервере для генерации содержимого страницы и испольнения других процессы  дл этого был разработан CGI протокол (Common Gateway Interface)  .

CGI определяет окружение (переменные окружения, запрос конкретных переменных и т.д.), как будет выполненятся сценарий  и как данные передаются между сценарием и веб-сервером. Для каждого запроса CGI настраивает окружение, порождает запущенный экземпляр сценария и передает все входящие в него данные, а также захватывает и посылает вывод скрипта на сервер.

Назначение интерфейса CGI. CGI приложения

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

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

Например, нам нужно, чтобы в каком-то документе проставлялись текущая дата и время. Об этом говорит сайт https://intellect.icu . Разумеется, мы не можем заранее прописать их в документе — ведь в зависимости от того, когда он будет загружен пользователем, эта дата должна меняться. Зато мы можем написать сценарий (скрипт), который вычислит дату, вставит ее в документ и затем передаст его пользователю! Однако в построенной нами модели не хватает одного звена. Действительно, предположим, нам нужно, чтобы время в нашей странице проставлялось на основе часового пояса пользователя. Но как сценарий узнает, какой часовой пояс у региона, в котором живет этот человек (или какую-нибудь другую информацию, которую может предоставить пользователь)? Видимо, должен быть какой-то механизм, который позволит пользователю не только получать, но также и передавать информацию серверу (в данном случае, например, поправку времени в часах относительно Москвы). Это также обеспечивает 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-сценарию.

В настоящее время используется модернизированный интерфейс FastCGI

Далее мы, наконец, рассмотрим методы передачи запросов.

 

 

В заключение, эта статья об назначение интерфейса cgi cgi приложения подчеркивает важность того что вы тут, расширяете ваше сознание, знания, навыки и умения. Надеюсь, что теперь ты понял что такое назначение интерфейса cgi cgi приложения и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)

создано: 2016-01-25
обновлено: 2021-03-13
132706



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей



Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)

Термины: Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)