Html і cgi

Загальний шлюзовий інтерфейс - ключ до інтерактивних вузлів Web.

Сьогодні ми розглянемо широко поширені в Internet служби і поговоримо про те, що необхідно зробити адміністратору мережі, щоб такі служби були доступні як всередині вашої компанії (через корпоративну Intranet), так і для інших користувачів (через Internet). Темою сьогоднішньої розмови буде HTML і загальний шлюзовий інтерфейс (CGI).

Використовуючи прості теги, вам нічого не варто зробити гіперпосиланням будь-яке слово або фразу. Однак гіперпосиланням може бути не тільки текст, а й зображення. Не будемо голослівними і звернемося до наступного фрагменту коду:

Цей фрагмент програми виводить графічне зображення FROG.GIF. Якщо користувач вкаже на дане зображення і клацне клавішею миші, браузер Web пошле запит на сторінку Web (FROG.HTML) сервера Web (www.amphibian.com).

ЗАГАЛЬНИЙ шлюзовий інтерфейс

З самого початку розробники Web шукали способи зробити сервери Web інтерактивними, для того щоб дати можливість користувачам не тільки отримувати, але і вводити інформацію. Стандартний спосіб створення такої інформації тепер відомий як загальний шлюзовий інтерфейс. Користувач запитує інформацію у сервера Web, а той, використовуючи CGI, запускає програму для пошуку інформації та повертає результат користувачеві. Для цього сервер Web зазвичай генерує сторінку HTML, за допомогою вставки декількох операторів HTML в уже існуючу сторінку. Сервер Web, що застосовує CGI таким чином, може потенційно запускати найрізноманітніші програми.

Якщо ви використовували механізм пошуку Web для того, щоб знайти цікавий для вас текст, то ви застосовували CGI. Але CGI сам по собі не є механізмом пошуку. Насправді він забезпечує взаємодію таких програм, як механізми пошуку, з серверами Web.

Сервери HTTP (Web) в першу чергу призначені для обслуговування документів HTML. Файли CGI, однак, не документи, а програми. Для зберігання програм CGI більшість серверів використовують спеціальний каталог, зазвичай називається CGI-BIN. Сервер Web знає, що файл, що зберігається в каталозі CGI-BIN, повинен виконуватися, а не пересилатися для відтворення призначеному для користувача браузеру Web. Програми CGI можуть бути написані на різних мовах, в тому числі на мові командних файлів DOS, BASIC, C і мовами опису сценаріїв, наприклад Perl. Завдання CGI якраз в тому і полягає, щоб в потрібний час активізувати програму CGI і передати програмі будь-які необхідні дані, створені користувачем або операційним середовищем. Програма CGI потім обробляє дані, що вводяться. Виконавши цю обробку (час виконання - максимум кілька секунд, оскільки метою є інтерактивність), програма повинна повернути деякий результат користувачеві через його браузер Web. Для того щоб браузер міг відтворити результат, програма CGI повинна перетворити свої вихідні дані в документ HTML.

ФОРМА НА БУДЬ ВИПАДОК

Вихідний код форми оточують теги

і
(Див. Рядки 1 і 14 Роздруківки 1). ACTION визначає дії, які будуть зроблені після передачі форми. Іншими словами, ACTION визначає, яка програма CGI повинна бути запущена для обробки форми, і ви вказуєте або повний, або частковий URL даної програми (в нашому випадку це /SGI-BIN/EXAMPLE.PL). Залежно від сервера Web ви можете задати для всіх програм CGI каталог за замовчуванням. Якщо програма, яку ви хочете запустити, зберігається в цьому каталозі, то досить вказувати тільки ім'я файлу, що її містить. В іншому випадку вам, можливо, доведеться написати повний URL файлу.

METHOD використовується для передачі вхідних даних з форми в програму CGI, обробну ці дані. Трохи пізніше ми докладно розглянемо представлений тут метод, а поки відзначимо, що можна використовувати два основні методи: GET і POST. Якщо ви збираєтеся застосовувати для передачі даних з форми в програму CGI, зазначену в ACTION = "/SGI-BIN/EXAMPLE.PL", метод GET, переконайтеся, що ця програма CGI здатна сприймати дані, передані таким чином. Крім того, якщо ви використовуєте для передачі даних з вашої форми метод POST, упевніться, що програма очікує отримання даних саме за цим методом.

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

Давайте спочатку поговоримо про кнопках перемикання. Кнопка визначається зазначенням RADIO як тип введення. Три рядки (з 6 по 8) відносяться до кнопок перемикання, кожну з яких можна вибрати. Всі рядки містить комбінацію NAME = "PRODTYPE", визначаючи логічне поле з ім'ям PRODTYPE. Якщо відзначена перша кнопка, поле PRODTYPE прийме значення BRIDGE. (Значення визначається комбінацією "VALUE =" BRIDGE "".) Зверніть також увагу на ключове слово CHECKED в рядку 6. При першій появі форми буде виділена кнопка BRIDGE; іншими словами, це значення ми зробили значенням за замовчуванням; користувач може змінити його, натиснувши на кнопки Router або Switch.

Далі йде серія з трьох прапорців, що дозволяють вибрати, який з мережевих протоколів підтримує продукт (рядки з 9 по 11). При натисканні в рамці прапорця з'являється "X", який вказує на те, що прапорець піднятий; при повторному натисканні "X" зникає, тобто прапорець знімається.

Рамка прапорця створюється за допомогою фрази "INPUT TYPE =" CHECKBOX ". Для того щоб програма працювала правильно, ви повинні визначати тип вводиться параметра як одне слово. Ви повинні також вказати назву поля введення. У роздруківці 1 ім'я поля введення для першого прапорця визначено як IP. Як бачите, код містить ще ключове слово CHECKED, яке вказує на те, що за умовчанням цей прапорець буде відзначений; очистити його користувач може, просто клацнувши в рамці.

Коли прапорець піднятий, значення за замовчуванням для поля з цим ім'ям одно "ON". Хоча в прикладі це не вказано, ви можете додатково використовувати атрибут VALUE для установки значення, наприклад "GREEN", в разі якщо цей прапорець відзначається. У нашому прикладі всі три прапорця за замовчуванням виділені. Таким чином, якщо користувач не зніме прапорець, форма поверне значення IP = ON, IPX = ON і APPLETALK = ON. Якщо відзначений тільки прапорець IP, форма поверне тільки IP = ON. Прапорці, відповідні IPX і APPLETALK, ми не включили.

Рядок 12 Роздруківки 1 визначає кнопку SUBMIT. Після заповнення форми для її передачі програмі CGI, яку запускає на сервері Web, користувач повинен натиснути на кнопку SUBMIT. Як можна бачити в рядку 12, кнопка SUBMIT створюється при вказівці SUBMIT як тип введення. Текст, що розміщується на кнопці, можна задати в змінної VALUE.

Коли користувач натискає на кнопку SUBMIT, браузер Web робить деякі дії, визначені в ACTION для цієї форми (наприклад, як в рядку 1 Роздруківки 1). В даному випадку сервер Web запустить сценарій на мові Perl, який в нашому прикладі називається EXAMPLE.PL і розташований в каталозі CGI-BIN.

Як сервер Web дізнається про те, що йому потрібно виконати програму, а не просто передати її у відповідь на запит браузера Web? Це випливає з назви каталогу, де програма знаходиться - CGI-BIN. У більшості серверів Web цей каталог зарезервований спеціально для виконуваних файлів. (Ви можете зберігати виконувані файли і в інших каталогах, але CGI-BIN повинен містити всі файли, призначені для віддаленого запуску через Web.)

Зберігання всіх виконуваних файлів в каталозі CGI-BIN є, крім того, хорошої заходом захисту. Як адміністратор Web, ви повинні дозволити серверу Web виконувати тільки знаходяться в цьому каталозі програми. Крім цього, ретельно перевірте всі програми, що поміщаються в даний каталог, і переконайтеся, що вони не можуть бути використані для псування, або заміни файлів, або обходу заходів захисту. Якщо, наприклад, хтось може застосовувати одну з ваших програм для того, щоб прочитати файл системних паролів, захист вашої системи нікуди не годиться.

У розглянутому нами прикладі ми згадали Perl, Practical Extraction and Report Language. Для тих, хто з ним не знайомий, пояснимо. Perl є інтерпретована мова, який спочатку розроблявся для використання в Unix-системах, але зараз він перенесений в багато інших операційні системи. Інтерпретатори Perl існують, наприклад, для систем Macintosh і Windows NT. Програми на мові Perl зазвичай називають сценаріями, оскільки, в порівнянні з розробкою програм на C і інших стандартних мовах програмування, створюються вони відносно швидко і просто. Perl ближче до мови командних файлів DOS, ніж до класичних мов програмування. Особливо гарний Perl в роботі з рядками, що, як ви вже мали можливість переконатися, дуже важливо для програмування CGI.

Рядок 13 Роздруківки 1 описує кнопку Reset. Якщо користувач натисне на цю кнопку, всі параметри встановлюються рівними значенням за замовчуванням. У нашому прикладі будуть відзначені кнопка перемикання Bridge і все три прапорці (IP, IPX і AppleTalk).

При натисканні на кнопку Submit інформація передається серверу Web у вигляді пар з імен полів (також званих ключами) і значень. Припустимо, що в наведеному нами прикладі форми користувач в якості імені продукту ввів SuperDuper, зазначив кнопку перемикання Router і як підтримуваних протоколів вказав IP і IPX. В цьому випадку, при натисканні на кнопку Submit, форма буде передана з параметрами NAME = SuperDuper, IP = ON і IPX = ON. (Якщо прапорець AppleTalk знятий, то значення поля AppleTalk ( "AppleTalk = off") просто не буде переданон.)

Отже, ми розглянули, як форми HTML отримують інформацію від користувача Web і передають її програмі CGI у вигляді пари ключ / значення. Оскільки оператор ACTION, заданий в відкриваючому тезі

, вказує на файл, розташований в каталозі CGI-BIN, сервер Web знає, що вказаний файл повинен бути запущений, а не показаний робить запит браузером Web, як це було б у разі простого документа HTML.

Знайомі з CGI

Програми CGI схожі на звичайні. Вони теж отримують інформацію з STDIN або через змінні оточення і посилають вихідні дані на STDOUT.

Для того щоб зрозуміти принцип взаємодії браузера Web з програмою CGI, нам необхідно повернутися трохи назад і розглянути, яким чином браузер передає прості запити HTML і як на них реагує сервер Web.

Припустимо, ви вставляєте наступну гіпертекстове посилання в свій документ HTML:

Якщо вибрати це посилання, браузер ініціює наступний запит серверу Web:

Слідом за заголовком GET йдуть два заголовка Accept, що вказують на те, що браузер може сприймати файли зі звичайним текстом або текстом у форматі HTML. Якщо браузер може сприймати більше число типів даних, у запиті з'явиться більше заголовків Accept, що описують кожен тип даних в термінах Multipurpose Internet Mail Extensions (MIME).

Реакція сервера Web на цей запит буде виглядати приблизно так:

Тема "Server" передає серверу Web ім'я і номер версії, а також версію використовуваного HTTP. Інші заголовки описують тип інформаційного наповнення (в нашому випадку це текст у форматі HTML) і довжину (231 байт) переданого документа. Браузер Web потім читає і обробляє HTML-сегмент цього файлу.

У випадку з CGI вся ця процедура не сильно відрізняється, за винятком того, що запитуваний файл буде знаходитися в каталозі CGI-BIN. Це вказує сервера Web на те, що потрібний файл повинен бути виконаний, а не посланий браузеру Web для відображення як документ HTML.

Вище я вже відзначав, що інформація, що отримується від користувача або його браузера Web, може бути надіслана сервера Web одним з двох способів: за методом GET або POST.

При методі GET всі дані форми включаються в URL в так звану рядок запиту. Для прикладу припустимо, що у нас є проста форма, що має тільки два поля, які називаються COLOR і SIZE, і що користувач ввів SKY BLUE і LARGE відповідно. Давайте також припустимо, що програма CGI, яка, як передбачається, буде обробляти дані, є сценарієм на мові Perl, іменується EXAMPLE.PL і знаходиться в каталозі CGI-BIN. Ви натискаєте кнопку Submit, і браузер, попередньо сформувавши запит HTML, відправить його серверу Web.

Код форми HTML повинен містити оператор ACTION, а також повідомити сервер Web, який з методів (в нашому випадку GET) буде використаний для пересилання даних. Таким чином, першим оператором нашої форми стане:

Це дозволить сервера Web дізнатися повний шлях до програми, яка повинна бути запущена ( "/CGI-BIN/EXAMPLE.PL"), а також те, що слід застосовувати метод GET. Як зазначалося раніше, метод GET використовує рядок запиту для передачі даних програмі CGI. У нашому прикладі, коли користувач натискає кнопку Submit, його браузер Web зробить наступний запит серверу Web:

Рядок тексту, наступна за знаком питання, являє собою рядок запиту. У відповідь на цей запит сервер запускає сценарій EXAMPLE.PL і поміщає рядок COLOR = SKY% 20BLUEsize = LARGE HTTP 1.0 в змінну оточення QUERY_STRING.

Наступного разу ми продовжимо розмову про те, що повинна робити ваша програма CGI для того, щоб обробити рядок запиту. Крім того, ми поговоримо про метод POST передачі даних програмі CGI.

Html і cgi

Малюнок 1.
Приклад форми HTML з декількома різними полями введення, в тому числі текстовим полем, кнопками перемикання і прапорцями.

Друк 1 - ПРИКЛАД КОДА ФОРМИ HTML

ПОДРОБИЦІ В INTERNET

With any suggestions or questions please feel free to contact us

Схожі статті