Int Size;

Size = atoi(getenv("CONTENT_LENGTH")); //получить длину строки

char szBuf[8196];

fread(szBuf, Size, 1, stdin); //прочитать полученные данные

Метод GET применяется относительно редко (длина строки QUERY_STRING ограничена), метод POST более предпочтителен.

Вне зависимости от примененного метода передачи данных (GET или POST) результат своей работы программа CGI должна направлять в стандартный поток вывода stdout (при этом WWW-сервер гарантирует возврат данных броузеру локального компьютера). Ниже приведен пример динамической генерации CGI-программой документа HTML и направления его на stdout

printf("Content-type: text/html\n\n"); //упрощенный пролог HTML

printf("<!DOCTYPE HTML PUBLIC \""-//W3C//DTD HTML 3.2//EN\"">");

printf("<HTML><HEAD>

<TITLE>My first dinamic HTML-page</TITLE>

</HEAD><BODY>");

printf("<H1>Результаты обработки данных формы:</H1>");

printf("</BODY></HTML>");

После получения возвращаемых HTML-данных они интерпретируются броузером. При нежелании генерировать сложный HTML-код подобным (весьма кропотливым) образом можно применить метод создания шаблона HTML-файла с последующей программной его модификацией и записью в stdout.

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

Заметим, что с помощью CGI-программ легко реализуются, например, счетчики числа посещений страниц; в качестве языка программирования CGI-программ часто используют интерпретатор языка Perl (Practical Extraction and Report Language, иногда в шутку Pathologically Eclectic Rubbish Lister, см. InterNet-адреса www.perl.com, www.cpan.org, orwant.www.media.mit.edu/the_perl_journal, www.tpj.com), хотя может быть применен практически любой язык программирования (особенно удо­бен C/C++). Например, в работе приведены исходные тексты CGI-приложений на языке Java, в] - на языке Perl; на WEB-сайте автора данной работы pilger.mgapi.eduреализована простая гостевая книга с применением Perl.

Недостатком приложений CGI является то, что для обработки каждого запроса WWW-сервером он запускает новое CGI-приложение (новый процесс), а т.к. современные сервераодновременно могут обрабатывать много запросов, ресурсы машины-сервера (например, объем оперативной памяти) быстро истощаются (не говоря уже о снижении производительности сервера). От подобного недостатка свободен метод ISAPI, основанный на обработке запросов динамически загружаемыми (из DLL-библиотек) функциями (недостаток - т.к. ISAPI-расширение выполняется в том же адресном пространстве, что и сам WEB-сервер, критическая ошибка ISAPI-приложения обычно вызывает крах сервера). В отличие от CGI, ISAPI-приложение получает данные не из стандартного потока, а с помощью специально предназначенной для этого функции интерфейса ISAPI; вместо стандартного потока вывода также применяется специальная функция [15].

Некоторые сервера (например, Apache) содержат встроенный Perl, при этом для каждого поступающего CGI-запроса сервер создает новый поток (вместо нового процесса); это значительно ускоряет выполнение CGI-запросов указанным сервером. Для работы под Windows’NT разработаны (см. www.activeware.com) пакеты PerlScript (разработка сценариев ActiveX) и PerlIS (динамически вызываемая библиотека ISAPI-интерфейса [20].

Известны как расширения ISAPI (по функциям аналогичны CGI-расширениям сервера), так и фильтры ISAPI (фактически являющиеся брандмауэрами, применяются для шифрования или перекодировки проходящих через сервер данных, компрессии информации, сбора статистических данных о пользователях, проверки прав доступа и др.).

При использования метода ISAPI имя соответствующего DLL-файла описывается в параметре ACTION формы (аналогично CGI), также описывается параметр METHOD, однако сами присланные на сервер данные могут быть получены с помощью специально зарезервированных функций GetServerVariable (чтение значений переменных среды) и ReadClient (собственно чтение присланных данных), отсылка же данных (как и при использовании CGI, обычно в виде динамически создаваемых HTML-файлов) производится функциями WriteClient и ServerSupportFunction.

Желающим более подробно ознакомиться с возможностями серверных расширений CGI и ISAPI рекомендуются работы [6,15,19].

Заметим, что CGI- и ISAPI-программы потенциально являются источниками снижения безопасности функционирования WEB-серверов. Например, можно советовать работу для ознакомления с началами обеспечения безопасности выполнения CGI-сценариев на Perl; ниже приведено несколько WEB-адресов, посвященных проблеме безопасности

 

· www.w3.org/Security/Faq/www-security-faq.html

· www.perl/com/CPAN-local/doc/FAQs/cgi/perl-cgi-faq.html

· stars.com/Authoring/Scripting/Sequrity

· www.go2net.com/people/paulp/cgi-sequrity/safe-cgi.txt

 

Мощным средством для упрощения процесса реализации функциональности и расширения возможностей технологии CGI является язык PHP/FI (Персональные инструментальные средства для Домашней Страницы / Интерпретатор Форм), предложения которого встраиваются непосредственно в текст HTML-страницы и выполняются процессом, инициализированным сервером (обычно Apache). PHP/FI существенно упрощает обработку запросов от форм и анализ SQL-запросов, допускает добавление пользовательских функций (обычно написанных на C). Использование PHP/FI повышает эффективность обработки запросов (CGI-программа не стартует, PHP/FI-код выполняется одним из серверных процессов), при этом повышается уровень защиты данных и конфигурируемость серверного ПО. Первым признаком того, что страница обрабатывается PHP/FI, является добавление нижнего колонтитула с информацией о количестве обращений к данной странице (если программа скомпилирована с опцией регистрации доступа).

 


Лекция








Дата добавления: 2015-09-14; просмотров: 785;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

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

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.006 сек.