Формат HTTP-відповіді.
Формат відповіді дуже схожий на формат запиту: він також має заголовок і тіло, розділене порожнім рядком. Заголовок також складається з основного рядка і рядків параметрів, але формат основного рядка відрізняється від такої в заголовку запиту. Основний рядок запиту складається з 3-х полів, розділених пропусками:
§ Версія протоколу - аналогічний відповідному параметру запиту.
§ Код помилки - кодове позначення "успішності" виконання запиту. Код 200 означає "все нормально" (OK).
§ Словесний опис помилки - "розшифровка" попередньої коду. Наприклад, для 200 це OK, для 500 - Internal Server Error.
Найбільш вживані параметри HTTP-відповіді:
§ Connection - аналогічний відповідному параметру запиту. Якщо сервер не підтримує Keep-Alive (є і такі), то значення Connection відповідає завжди close.
§ Content-Type ("тип вмісту") - містить позначення типа вмісту відповіді.
§ Залежно від значення Content-Type браузер сприймає відповідь як HTML-сторінку, картинку gif або jpeg, як файл, який треба зберегти на диску, або що-небудь ще і робить відповідні дії. Значення Content-Type для браузеру аналогічно значенню розширення файлу для Windows.
Деякі типи вмісту:
¨ text/html - текст у форматі HTML (веб-сторінка);
¨ text/plain - простий текст (аналогічний "блокнотовскому");
¨ image/jpeg - картинка у форматі JPEG;
¨ image/gif - те ж, у форматі GIF;
¨ application/octet-stream - потік "октетів" (тобто просто байт) для запису на диск.
§ Content-Length ("довжина вмісту") - довжина вмісту відповіді в байтах.
§ Last-Modified ("Модифікований востаннє") - дата останньої зміни документа.
Можливість пересилки через інтернет інформації всіх типів з'явилася революцією, але незабаром була виявлена і інша можливість. Якщо можна переслати через Web будь-який текст, то чому не можна переслати текст, створений програмою, а не узятий з готового файлу? При цьому відкривається море можливостей. Простий приклад: можна використовувати програму, що виводить поточний час, так, щоб читач бачив правильний час при кожному перегляді сторінки. Декілька розумних голів в National Center for Supercomputing Applications (Національний центр розробки застосувань для суперкомп'ютерів - NCSA), які створювали веб-сервер, таку можливість побачили, і незабаром з'явився CGI.
CGI - це набір правил, згідно яким програми на сервері можуть через веб-сервер посилати дані клієнтам. Специфікація CGI супроводилася змінами в HTML і HTTP, що вводили нову характеристику, відому як форми.
Якщо CGI дозволяє програмам посилати дані клієнтові, то форми розширюють цю можливість, дозволяючи клієнтові посилати дані для цієї CGI-програми. Поширені застосування CGI включають:
§ Динамічний HTML. Цілі сайти можуть генеруватися однією CGI-програмою.
§ Пошукові механізми, що знаходять документи із заданими користувачем словами.
§ Гостьові книги і дошки оголошень, в які користувачі можуть додавати свої повідомлення.
§ Бланки замовлень.
§ Анкети.
§ Витягання інформації з розміщеної на сервері бази даних.
Всі вони дають можливість з'єднання CGI з базою даних, що нас особливо цікавить.
Специфікація CGI
Отже, що в точності є «набором правил», що дозволяє CGI-програмі, скажімо, в Батавії, штату Ілінойс, обмінюватися даними з веб-броузером в Монголії? Офіційну специфікацію CGI разом з масою інших відомостей про CGI можна знайти на сервері NCSA за адресою http://hoohoo.ncsa.uiuc.edu/cgi/ .
Є чотири способи, якими CGI передає дані між CGI-програмою і веб-сервером-сервером, а отже, і клієнтом Web:
§ Змінні оточення.
§ Командний рядок.
§ Стандартний пристрій введення.
§ Стандартний пристрій виводу.
За допомогою цих чотирьох методів сервер пересилає всі дані, передані клієнтом, CGI-програмі. Потім CGI-програма робить свою чарівну справу і пересилає вихідні дані назад серверу, який переправляє їх клієнтові.
Ці дані наводяться з прикидкою на сервер HTTP Apache. Apache - найбільш поширений веб-сервер, що працює практично на будь-якій платформі, включаючи Windows 9х і Windows NT. Проте вони можуть бути застосовні до всіх HTTP-серверів, які підтримують CGI. Деякі патентовані сервери, наприклад, від Microsoft і Netscape, можуть мати додаткові функції або працювати трохи інакше. Оскільки обличчя Web продовжує змінюватися з неймовірною швидкістю, стандарти все ще розвиваються, і в майбутньому, поза сумнівом, стануться зміни. Проте, технологія CGI представляється сталою - розплачуватися за це доводиться тим, що інші технології, такі як аплети, її потіснили. Всі CGI-програми, які ви напишете, використовуючи ці відомості, майже напевно зможуть працювати ще довгі роки на більшості веб-серверів.
Коли CGI-програма викликається за допомогою форми - найбільш поширеного інтерфейсу, броузер передає серверу довгий рядок, на початку якого стоїть шлях до CGI-програмі і її ім'я. Потім слідують різні інші дані, які називаються інформацією шляху і передаються CGI-програмі через змінну оточення PATH_INFO (таблиця. 2-1). Після інформації шляху слідує символ «?», а за ним - дані форми, які посилаються серверу за допомогою методу HTTP GET. Ці дані стають доступними CGI-програмі через змінну оточення QUERY_STRING. Будь-які дані, які сторінка посилає з використанням методу HTTP POST, який використовується найчастіше, будуть передані CGI-програмі через стандартний пристрій введення. Типовий рядок, який може отримати сервер від броузера, показаний в таблиці. 3-1. Програма з ім'ям formread в каталозі cgi-bin викликається сервером з додатковою інформацією шляху extra/information і даними запиту choice=help - очевидно, як частина вихідного URL. Нарешті, дані самої форми (текст «CGI programming» в полі «keywords») пересилаються через метод HTTP POST.
Таблиця 2-1. Частини рядка, переданого броузером серверу
http://www.myserver.com/cgi-bin | /formread | /extra/information | ?choice=help |
назва програми | інформація про шлях | рядок запиту |
Змінні оточення
Коли сервер виконує CGI-программу, то перш за все передає їй деякі дані для роботи у вигляді змінних оточення. У специфікації офіційно визначені сімнадцять змінних, але неофіційно використовується значно більше - за допомогою описуємого нижче механізму, званого HTTP_mechanism. CGI-програма має доступ до цих змінних так само, як і до будь-яких змінних середовища командного процесора при запуску з командного рядка. У сценарії командного процесора, наприклад, до змінної оточення FOO можна звертатися як $FOO; у Perl це звернення виглядає, як $ENV{'FOO'}; у З - getenv("FOO"); і так далі. В таблиці 2-2 перераховані змінні, які завжди встановлюються сервером, - хоч би і в значення null. Окрім цих змінних дані, повертані клієнтом в заголовку запиту, привласнюються змінним вигляду HTTP_FOO, де FOO - ім'я заголовку. Наприклад, більшість веб-броузеров включають дані про версію в заголовок з ім'ям USER_AGENT . Ваша CGI-програма може отримати ці дані із змінної HTTP_USER_AGENT .
Таблиця 2-2. Змінні оточення CGI
Змінна оточення | Опис |
CONTENT LENGTH | Довжина даних, переданих методами POST або PUT, в байтах |
CONTENT_TYPE | Тип MIME даних, приєднаних за допомогою методів POST або PUT. |
GATEWAY_INTERFACE | Номер версії специфікації CGI, підтримуємий сервером. |
PATH_INFO | Додаткова інформація шляху, передана клієнтом. Наприклад, для запиту http://www.myserver.com/test.cgi/this/is/a/ path?field=green значенням змінної РАth_info буде /this/is/a/path. |
PATH_TRANSLATED | Те ж, що PATH_INFO, але сервер проводить всю можливу трансляцію, наприклад, розширення імен типа «~account». |
QUERY_STRING | Всі дані, наступні за символом «?» у URL. Це також дані, передавані, коли REQUEST_METOD форми є GEТ. |
REMOTE_ADDR | IP-адрес клієнта, що робить запит. |
REMOTE_HOST | Ім'я вузла машини клієнта, якщо воно доступне. |
REMOTE_IDENT | Якщо веб-сервер і клієнт підтримують ідентифікацію типа identd, то це ім'я користувача облікового запису, який робить запит. |
REQUEST_METHOD | Метод, використовуваний клієнтом для запиту. Для CGI-программ, які ми збираємося створювати, це зазвичай буде POST або GET. |
SCRIPT_NAME | Шлях до виконуваного сценарію, вказаний клієнтом. Може використовуватися при посиланні URL на самого себе, і для того, щоб сценарії, посилання на яких існують в різних місцях, могли виконуватися по-різному залежно від місця. |
SERVER_NAME | Ім'я вузла - або IP-адреса, якщо ім'я недоступне, машини, на якій виконується веб-сервер. |
SERVER_PORT | Номер порту, використовуваного веб-сервером. |
SERVER_PROTOCOL | Протокол, використовуваний клієнтом для зв'язку з сервером. У нашому випадку цей протокол майже завжди HTTP. |
SERVER_SOFTWARE | Дані про версію веб-сервера, що виконує CGI-программу. |
Наведемо приклад сценарію CGI на Perl, який виводить всі змінні оточення, встановлені сервером, а також всі успадковані змінні, встановлені командним процесором, що запустив сервер.
Дата добавления: 2016-04-02; просмотров: 781;