Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shpory_PSP.docx
Скачиваний:
3
Добавлен:
27.09.2019
Размер:
366.75 Кб
Скачать

16.Классическое cgi-программирование. Что такое cgi-программа

CGI-программа выполняется на Web-сервере в ответ на запрос, сделанный броузером. Сервер в этом случае является как бы посредником между броузером и CGI-программой – он передает программе запрос броузера и возвращает броузеру информацию, выданную программой. Например, программа может получить от броузера название некоторой книги и, посмотреть в таблице имя автора и вернуть полученное имя пользователю (броузеру). Для написания такой программы можно использовать любой язык программирования – CGI определяет только стандарт интерфейса между Web-сервером и программой, которую мы создаем. Проще перечислить, что не делает CGI-программа: не взаимодействует с пользователем на прямую, не выводит информацию в виде меню или приглашений, не выводит на экран графические изображения, вообще на экран ничего не выводит. Хотя такая программа может генерировать бинарные данные, в которых фактически содержится некоторый рисунок, непосредственным выводом рисунка программа не занимается, она не создает окон и никак не использует средства графического интерфейса пользователя.

Правильная CGI-программа должна удовлетворять следующим требованиям:

  • запускаться из командной строки;

  • генерировать правильный заголовок типа данных.

Программа может возвращать данные любого типа, например HTML-текст, рисунки в формате GIF, простой текст, документы Microsoft Word и пр. Заголовок типа возвращаемых данных сообщает броузеру о типе данных, для того чтобы обеспечить их правильную обработку. Если Web-сервер может запустить программу на выполнение и если программа возвращает правильные данные, она может быть использована в качестве CGI-программы.

Как уже говорилось выше, CGI – это стандарт, или набор правил, определяющих , как Web-сервер и внешняя по отношению к нему программа общаются между собой.

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

Как выполняются cgi-программы

При поступлении запроса на CGI-программу возникает две задачи. Первая – это определить, что требуется выполнить именно CGI-программу, а вторая - это собственно ее выполнение. За первую задачу, за определение того, что выполнить, отвечает сервер, а за вторую – операционная система.

Есть несколько способов различать запрос на выполнение программы и на передачу статического файла. Первый, самый распространенный способ – использование каталога cgi-bin. Все файлы в этом каталоге рассматриваются как программы, и при запросе на такой файл сервер пытается такой файл выполнить. Второй способ состоит в том, что сервер различает простые файлы и программы по расширению.

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

Обмен данными по спецификации CGI реализуется обычно через переменные окружения и стандартный ввод/вывод. Выбор механизма передачи параметров определяется методом доступа, который указывается в форме в атрибуте METHOD. Если используется метод GET, то передача параметров происходит с помощью переменных окружения, которые сервер создает при запуске внешней программы. Через них передается приложению как служебная информация (версия программного обеспечения, доменное имя сервера и др.), так сами данные (в переменной QUERY_STRING). При методе POST для передачи используется стандартный ввод. А в переменных окружения фиксируется тип и длина передаваемой информации (CONTENT_TYPE и CONTENT_LENGTH). Для возврата данных серверу CGI-программа использует стандартный вывод. При этом вывод состоит из заголовка и собственно данных. Результат работы CGI-программы может передаваться клиенту без каких-либо преобразований со стороны сервера, если он обеспечивает построение полного HTTP-заголовка, в противном случае сервер модифицирует заголовок в соответствии со спецификацией HTTP. Обязательным для результатов вывода при генерировании документов "на лету", когда реального документа в файловой системе сервера не остается, является только HTTP-заголовок Content-type, в котором указывается тип возвращаемого документа для правильной интерпретации браузером. Обычно в Content-type указывают текстовые типы text/plain и text/html. При использовании такого вида скриптов следует учитывать, что не все серверы и клиенты отрабатывают так, как представляется разработчику. Так, при указании Content-type: text/html, некоторые клиенты не реализуют сканирования полученного текста на предмет наличия в нем встроенной графики.

При применение спецификации CGI для обмена данными с внешними прикладными программами можно выделить следующие преимущества:

  • прозрачность использования;

  • "языковая" независимость - CGI-программы могут быть написаны на любом языке программирования или командном языке, имеющим средства работы со строками;

  • процессная изолированность - при запуске CGI-програмы на сервере порождается отдельный процесс и ошибочный CGI-скрипт не может сломать Web-сервер или получить доступ к закрытой информации;

  • открытость стандарта - CGI интерфейс применим на каждом Web-сервере;

  • архитектурная независимость - CGI не зависит от особенностей реализации архитектуры сервера (однопоточности, многопоточности и т.д.);

Но CGI имеет также и существенные недостатки. Главная проблема заключается в затратах на выполнение CGI-приложений: поскольку на сервере для каждого очередного запроса порождается новый процесс, который завершается после его выполнения, то это приводит к невысокому быстродействию CGI-программы и снижает эффективность работы сервера. При использовании CGI-программ для доступа к базам данных из-за отсутствия поддержки непрерывного соединения Web-сервера и соответствующей СУБД очень сложно произвести процесс "ведения" пользователя базой данных, так как каждый раз при генерации очередного запроса требуется новое подключение. Но в то же время закрытие соединения после обработки каждого запроса сильно осложняет деятельность хакеров, так как при отсутствии постоянного подключения к БД проникнуть в нее гораздо сложнее. Другое достоинство этого "недостатка" состоит в том, что связь с Web-сервером устанавливается только на короткий промежуток времени, в результате чего он не перегружается и может выполнять другие задачи.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]