Термінова допомога студентам
Дипломи, курсові, реферати, контрольні...

Использование CGI під час створення інтерактивних интерфейсов

РефератДопомога в написанніДізнатися вартістьмоєї роботи

Для реалізації взаємодії «клієнт-сервер «важливо, який метод HTTP запиту використовує клієнтська частина при зверненні до WWW серверу. Загалом разі, запит — це повідомлення, посылаемое клієнтом серверу. Перша рядок HTTP запроса (см. гл.3) включає у собі метод, що має бути застосований до запрашиваемому ресурсу, ідентифікатор ресурса (URI-Uniform Resource Identifier), і що використовується версію… Читати ще >

Использование CGI під час створення інтерактивних интерфейсов (реферат, курсова, диплом, контрольна)

Использование CGI під час створення інтерактивних інтерфейсів.

4.1 WWW (World Wide Web) і кошти інтерактивного взаємодії.

4.2Спецификация CGI 4.2.1Переменные оточення 4.2.2Стандартный висновок 4.2.3Стандартный вхідний потік 4.2.4Аргументы командної рядки.

4.3Последовательность дій в обробці вхідних даних cgi-модуля до різних методів запиту GET і POST 4.3.1Для методу GET 4.3.2Для методу POST.

4.4Примеры cgi-модулей.

4.1 WWW (World Wide Web) і кошти інтерактивного взаємодії

Цель даної глави познайомити користувача з тією частиною WWW-технологий що з створенням інтерактивних інтерфейсів планує що користувач знайомий з основами WWW, HTML і С/С++.

В загальному разі, інтерактивний інтерфейс користувача є систему, що забезпечує взаємодія користувача і програми. Для WWW, інтерактивний інтерфейс можна з’ясувати, як послідовність HTML-документов, що реалізують інтерфейс користувача. Можна ще умовно класифікувати принципи побудови інтерфейсу на кшталт формування HTML-документа:

статичний динамічний

В першому випадку джерелом інтерфейсу є HTML-документ, створений якомусь текстовому чи HTML-ориентированном редакторі. Отже, даний документ залишається незмінною протягом використання. У другий випадок джерелом інтерфейсу є HTML-документ сгенерированный cgi-модулем. Отже, з’являється деяка гнучкість в видоизменении інтерфейсу під час використання.

Таким чином, можна запровадити поняття інтерактивного інтерфейсу для WWW.

Интерактивный інтерфейс для WWW є послідовність статичних чи динамічно формованих HTML-документов, що реалізують інтерфейс користувача.

Практически будь-яка завдання, вирішальна проблему отримання даних від клієнта, пов’язані з побудовою інтерфейсу. Найцікавішим побудова інтерфейсів до різним баз даних, доступом до SQL-серверу, отримання інформації від периферійних пристроїв, створення клієнтських робочих місць. Усе це можливо у вигляді CGI (Common Gateway Interface).

Common Gateway Interface (CGI) є стандартом інтерфейсу зовнішньої прикладної програми з WWW сервером.

Задача побудови вищезгаданих інтерфейсів ділиться на частини:

Клієнтська частина Серверна частина

.

Рисунок 4−1. Дві частини інтерактивного інтерфейсу.

Клієнтська частина

Для створення клієнтської частини необхідно створити HTML-документ, у якому реалізований інтерфейс з користувачем. У мові HTML може бути у вигляді форм.

Конструкции мови HTML, використовувані при реалізації форм, дано у додатку 1 до гол. 4.

Серверна частина

Серверная частина складається з виконуваного модуля, вирішального основні завдання обробки даних які від клієнтської частини, формування відповіді в форматі HTML, тощо. Такий модуль називається cgi-модулем.

Методи HTTP запиту

Для реалізації взаємодії «клієнт-сервер «важливо, який метод HTTP запиту використовує клієнтська частина при зверненні до WWW серверу. Загалом разі, запит — це повідомлення, посылаемое клієнтом серверу. Перша рядок HTTP запроса (см. гл.3) включає у собі метод, що має бути застосований до запрашиваемому ресурсу, ідентифікатор ресурса (URI-Uniform Resource Identifier), і що використовується версію HTTP-протокола. У означеному нами разі, клієнтська частина застосовує методи запиту POST и GET. Метод POST використовується для запиту серверу, щоб він прийняв інформацію, включену в запит, як що стосується ресурсу, зазначеному ідентифікатором ресурсу. Метод GET використовується для отримання будь-який інформації, ідентифікованої ідентифікатором ресурсу в HTTP запиті.

Для WWW-сервера стандарту NCSA прикладні програми чи CGI-модули, обробні потік даних від клієнта чи (і) формують зворотний потік даних може бути написані мовами програмування як:

C/C++; Будь-який UNIX shell; Fortran; Perl; Visual Basic; TCL; AppleScript; 4.2 Специфікація CGI

CGI визначає 4 інформаційних потоку.

Змінні оточення Стандартний вхідний потік Стандартний вихідний потік Командна рядок

.

Рисунок 4−2. CGI-интерфейс.

4.2.1 Змінні оточення

Переменные оточення умовно діляться на два типу:

загальні всім типів запитів (встановлюються всім типів) залежать від методу запиту

К змінним першого типу ставляться такі перемінні:

SERVER_SOFTWARE містить інформацію про WWW сервері (название/версия).

SERVER_NAME містить інформацію про ім'я машини, де запущено WWW сервер, символічне ім'я чи IP адресу відповідні URL.

GATEWAY_INERFACE містить інформацію версію CGI (CGI/версия).

Следующие перемінні є специфічними до різних типів запитів і значення цим змінним присвоюються перед викликом cgi-модуля.

CONTENT_LENGTH значення цієї перемінної відповідає довжині стандартного вхідного потоку в символах.

CONTENT_TYPE ця змінна специфицирована для запитів містять додаткову інформацію, як-от HTTP POST і PUT, і має тип даних цієї інформації.

SERVER_PROTOCOL ця змінна містить інформацію про ім'я і версії інформаційного протоколу (протокол/версия).

SERVER_PORT значення перемінної містить номер порту, якою був посланий запит.

REQUEST_METHOD метод запиту, який використали «POST », «GET », «HEAD «тощо.

PATH_INFO значення перемінної містить отриманий клієнта віртуальний шлях до cgi-модуля.

PATH_TRANSLATED значення перемінної містить фізичний шлях до cgi-модуля, перетворений з значення PATH_INFO.

SCRIPT_NAME віртуальний шлях до исполняемому модулю, використовуваний щоб одержати URL.

QUERY_STRING значення цієї перемінної відповідає рядку символів наступній за знаком "? «в URL відповідному даному запиту. Ця інформація не декодируется сервером.

REMOTE_HOST містить символічне ім'я віддаленій машини, з якою зроблено запит. Без цієї інформації сервер привласнює порожній значення й встановлює зміну REMOTE_ADDRESS.

REMOTE_ADDRESSсодержит IP адресу клієнта.

AUTH_TYPE якщо WWW-сервер підтримує аутентификацию (підтвердження дійсності) користувачів і cgi-модуль є захищеною від стороннього доступу ті значення перемінної специфицирует метод аутотентификации.

REMOTE_USER містить ім'я користувача у разі аутотентификации.

REMOTE_IDENT містить ім'я користувача, одержаний серверу (якщо сервер підтримує аутентификацию відповідно до RFC 931).

HTTP_ACCEPT список типів MIME відомих клієнту. Кожен тип у списку може бути відділений коми відповідно до специфікації HTTP (тип/подтип, тип/подтип і т.д.).

HTTP_USER_AGENT назва програми перегляду яку вживає клієнт при посилці запиту.

4.2.2 Стандартний висновок

СGI — модуль виводить інформацію у стандартний вихідний потік. Такий висновок може бути чи документ, сгенерированный cgi-модулем, чи інструкцію серверу, де отримати необхідний документ. Зазвичай cgi-модуль виробляє свій висновок. Перевага такий підхід у цьому, що cgi-модуль ні формувати повний HTTP заголовок за кожен запит.

Заголовок вихідного потока У окремих випадках необхідно уникати обробки сервером виведення cgi-модуля, і посилати клієнту дані не змінювалась. Щоб розрізнити таких cgi-модулей, CGI вимагає, щоб їх назви починалися на nph-. І тут формування синтаксично правильної відповіді клієнту cgi-модуль перебирає.

Заголовки з синтаксичним разбором Висновок cgi-модуля має починатися з заголовка що містить певні рядки і завершуватися двома символами CR (0×10).

Любые рядки які є директивами серверу, посилаються безпосередньо клієнту. На цей час, CGI специфікація визначає три директиви серверу:

Content-type MIME чи тип возвращаемого документа.

Например: Content-type: text/html повідомляє серверу, що такі для цього повідомленням дані - є документ в форматі HTML.

Location вказує серверу, що повертається не сам документ, а посилання нього.

Если аргументом є URL, то сервер передасть вказівку клієнту на перенапрямок запиту. Якщо аргумент є віртуальний шлях, сервер поверне клієнту поставлене цим шляхом документ, коли б клієнт запитував цей документ ще безпосередньо.

Например: Location: internet призведе до того що, що WWW сервер видасть file. txt, коли б він був затребуваний клієнтом. Якщо cgi-модуль повертає посилання gopher сервер, наприклад на gopher://gopher.ncsa.uiuc.edu/. Висновок буде наступний:

Location: gopher://gopher.ncsa.uiuc.edu/.

*Status задає серверу HTTP/1.0 строку-статус, яка послано клієнту в форматі: nnn xxxxx.

где: nnn — 3-х цифровий код статусу.

ххххх — рядок причины Например: HTTP/1.0 200 OK.

Server: NCSA/1.0a6.

Content-type: text/plain.

В тому випадку, клієнту повідомлено про успішне виконання запиту.

4.2.3 Стандартний вхідний потік

В разі методу запиту POST дані передаються як вміст HTTP запиту. І послані у стандартний вхідний потік.

Данные передаються cgi-модулю у наступному формі:

name=value&name1=value1&…&nameN=valueN де name — ім'я перемінної, value — значення перемінної, N — кількість змінних.

На файловий дескриптор стандартного потоку введення посилається CONTENT_LENGTH байт. Також сервер передає cgi-модулю CONTENT_TYPE (тип даних). Сервер не посилає символ кінця файла після передачі CONTENT_LENGTH байт даних або ж після того, як cgi-модуль прочитає. Змінні оточення CONTENT_LENGTH і CONTENT_TYPE встановлюються на той час, коли сервер виконує cgi-модуль. Отже, тоді як результаті виконання форми з аргументом тега FORM — METHOD= «POST «сформована рядок даних firm=МММ&price=100 023, то сервер встановить значення CONTENT_LENGTH рівним 21 і CONTENT_TYPE в application/x-www-form-urlencoded, а стандартний потік введення посилається блок даних.

В разі методу GET, рядок даних передається як частину URL. Тобто. наприклад internet.

В цьому випадку змінна оточення QUERY_STRING приймає значення name1=value1&name2=value2.

4.2.4 Аргументи командної рядки

СGI-модуль в командної рядку від серверу отримує:

залишок URL після імені cgi-модуля як параметра (перший параметр буде порожній, якщо було присутнє лише ім'я cgi-модуля), і список ключових слів як залишку командної рядки для скрипта пошуку, чи що чергуються імена полів форми з доданим знаком рівності і відповідних значень змінних.

Ключевые слова, імена і значення полів форми передаються декодированными (з HTTP URL формату кодування) і перекодированными відповідно до правилами кодування Bourne shell отже cgi-модуль в командної рядку отримає інформацію без необхідності виконувати додаткові перетворення.

4.3 Послідовність дій для обробки вхідних даних cgi-модуля до різних методів запиту GET і POST

Исходя з різниці методів запитів GET і POST, можна визначити послідовність дій в обробці вхідних даних cgi-модуля до різних типів запитів.

4.3.1 Для методу GET Одержати значення перемінної QUERY_STRING Декодировать імена та його значення (враховуючи, що це прогалини при декодуванні сервером було замінено символом «+ «і всі символи з десятковим кодом більше 128 перетворені на символ «% «і наступним його шестнадцатеричным кодом символу.) Сформувати структуру відповідності «ім'я — значення «для використання в cgi-модуле 4.3.2 Для методу POST Одержати з стандартного вхідного потоку CONTENT_LENGTH символів Декодировать імена та його значення (враховуючи, що це прогалини при декодуванні сервером було замінено символом «+ «і всі символи з десятковим кодом більше 128 перетворені на символ «% «і наступним його шестнадцатеричным кодом символу.) Сформувати структуру відповідності «ім'я — значення «для використання в cgi-модуле

Очевидно, що відмінність лише у джерелі даних. Тому, у принципі, можливе створення єдиного модуля для методів POST і GET. Слід лише додати на початок перевірку значення перемінної REQUEST_METHOD визначення методу запиту. Після формування структури «имя-значение «можна розпочати вирішення завдань, заради яких, власне, створювався cgi-модуль. Зрозуміло, що завдання, можуть бути вирішені cgi-модулем, можуть бути дуже різноманітними (здобуття влади та обробка пошти, доступом до баз даних, гостьова книжка, і т.д.).

Следующим важливим моментом є динамічний формування cgi-модулем HTML-документа (оформлення результату роботи модуля). Наприклад, таблиці вибірки з даних.

Для цього cgi-модуль повинен видати у стандартний вихідний потік заголовок що з рядки: Content-type: text/html і порожній рядки (двох символів CR).

После цього заголовка можна давати будь-який текст в форматі HTML.

4.4 Приклади cgi-модулей

В як приклад розглянемо роботу тестових програм поставляющихся разом із програмним забезпеченням серверу НТТРD стандарту NCSA.

Для тестування роботи форм поставляються програми: post-query — для тестування роботи форм з методом запиту POST query — для тестування роботи форм з методом запиту GET util.c — описание функцій в обробці вхідного потоку (використовується query і post-query).

Рассмотрим простий приклад форми мовою HTML яка використовує програму query.

Приклад використання CGI Введите своє имя (Фамилию Ім'я Отчество):.

Пол: — чоловічоїженский.

После ініціації форми шляхом натискання кнопки «Послати запит «WWW сервер обробляє потік даних від форми (заміняє все прогалини у іменах і значеннях на символ «+ », заміняє все символи з десятковим кодом великим 128 на символ «% «і наступним його шестнадцатеричным кодом символу (наприклад «І «в %С8)). Вихідний потік прийме такий вигляд:

RealName=%CF%E5%F2%F0%EE%E2+%C8%E2%E0%ED+%D1%E8%E4%EE%F0%EE%E2%E8%F7&Sex=%CC%F3%E6%F1%EA%EE%E9&Submit=%CF%EE%F1%EB%E0%F2%FC+%E7%E0%EF%F0%EE%F1.

В момент передачі управління модулю post-query сервер привласнює значення змінним оточення і аргументів командної рядки:

argc = 0. argv = SERVER_SOFTWARE = NCSA/1.5.1 SERVER_NAME = iceman.cnit.nsu.ru GATEWAY_INTERFACE = CGI/1.1 SERVER_PROTOCOL = HTTP/1.0 SERVER_PORT = 80 REQUEST_METHOD = POST HTTP_ACCEPT = image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,*/* PATH_INFO = PATH_TRANSLATED = SCRIPT_NAME = /cgi-bin/test-cgi QUERY_STRING = REMOTE_HOST = fwa.cnit.nsu.ru REMOTE_ADDR = 193.124.209.74 REMOTE_USER = AUTH_TYPE = CONTENT_TYPE = application/x-www-form-urlencoded CONTENT_LENGTH = 142.

Результат роботи post-query: Query ResultsYou submitted the following name/value pairs:

RealName = Петров Іван Сидорович Sex = Чоловічий Submit = Послати запит.

И на екрані браузери Query Results You submitted the following name/value pairs: RealName = Петров Іван Сидорович Sex = Чоловічий Submit = Послати запрос Ниже наведено вихідний текст програми post-query.

#include #ifndef NO_STDLIB_H #include #elsechar *getenv (); #endif #define MAX_ENTRIES 10 000 typedef struct { char *name; char *val; } entry; char *makeword (char *line, char stop); char *fmakeword (FILE *f, char stop, int *len); char x2c (char *what); void unescape_url (char *url); void plustospace (char *str); main (int argc, char *argv[]) { entry entries[MAX_ENTRIES]; register int x, m=0; int cl; printf («Content-type: text/html%c%c », 10,10); if (strcmp (getenv («REQUEST_METHOD »), «POST »)) { printf («This script should be referenced with a METHOD of POST. n »); printf («If you don «t understand this, see this »); printf («forms overview.%c », 10); exit (1); } if (strcmp (getenv («CONTENT_TYPE »), «application/x-www-form-urlencoded »)) {printf («This script can only be used to decode form results. n »); exit (1); } cl = atoi (getenv («CONTENT_LENGTH »)); for (x=0;cl && (!feof (stdin));x++) {m=x;entries[x]. val = fmakeword (stdin, «& «,&cl); plustospace (entries[x]. val); unescape_url (entries[x]. val); entries[x]. name = makeword (entries[x]. val, «= «); } printf («Query Results »); printf («You submitted the following name/value pairs:

%c ", 10); printf («%з », 10); for (x=0; x br tt/* Призначена виділення рядки, обмеженою «стоп-символом «Bstop,/B з потоку Bf/B довжиною Bcl. /B/ttbr tt*//tt br ttint wsize;/tt br ttchar *word;/tt br ttint ll;/ttbr br ttwsize = 102 400;/tt br ttll=0;/tt br ttword = (char *) malloc (sizeof (char) * (wsize + 1));/ttbr br ttwhile (1) {/tt br ttword[ll] = (char)fgetc (f);/tt br ttif (ll==wsize) {/tt br ttword[ll+1] = «.

Показати весь текст
Заповнити форму поточною роботою