Загальний шлюзовий інтерфейс - ключ до інтерактивних вузлів 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, заданий в відкриваючому тезі