logo
Ответы на вступительный экзамен Специалист_

Визначити інтерфейс загального шлюзу cgi та проаналізувати його альтернативи.

Інтерфейс CGI

Термін CGI (Common Gateway Interface – Загальний шлюзовий інтерфейс) позначає набір угод, які повинні дотримуватися Web-серверами при виконанні ними різних Web-додатків. Фактично, до недавнього часу все Web-програмування являло собою програмування CGI-додатків. Останнім часом ситуація змінилася. І хоча CGI все ще залишається негласним стандартом для Web-додатків, механізм роботи CGI-програм де-що оновився.

Припустимо, ви набираєте у вашому браузері http://www.server.com/path/pict.gif

Після введеного вами http-запиту сервер відсилає вам запитане зображення формату GIF (звичайно, якщо воно доступне за вказаною адресою). Проте сказати, що ви запросили саме зображення не можна. Чому? Справа в тому, що файл pict.gif може не бути картинкою і навіть взагалі не існувати. Здивовані? А це ні що інше, як прояв CGI. По-перше файл pict.gif і шлях /path/ можуть не існувати, оскільки адміністратор web-сервера може налаштувати аліаси (псевдоніми) для даного об’єкту на сервері. По-друге, файл pict.gif може сформувати CGI-програма “на льоту”, передавши в браузер готову картинку у форматі GIF. Ось саме в такому випадку були використані можливості CGI. Даний механізм абсолютно непомітний для користувача ресурсу, якому байдуже, яким чином в його браузері з’явилася картинка – браузер передав файл або файл передала програма. Подібним чином можна передавати і html-документи, в такому випадку вони можуть формуватися програмою динамічно та передаватися браузерам користувачів у відповідь на їхні запити.

Останній пункт особливо вражає. Якщо ви перейнялися його ідеєю, значить, ви зрозуміли в загальних рисах, що таке CGI. Якраз CGI забезпечує все те, що виглядає так прозоро для користувача. Традиційно програми, що працюють відповідно до угод CGI, називають сценаріями – швидше за все через те, що в більшості випадків їх пишуть на мовах-інтерпретатор (наприклад, на PHP або Perl).

Таким чином, ми можемо користуватися потужним механізмом, який дозволяє нам формувати документи “на льоту”.

Наприклад, нам потрібно, щоб в якомусь документі проставлялись поточна дата і час. Зрозуміло, ми не можемо заздалегідь прописати їх в документі – адже залежно від того, коли він буде завантажений користувачем, ця дата повинна змінюватися. Зате ми можемо написати сценарій (скрипт), який визначить дату, вставить її в документ і потім передасть його користувачеві! Проте в побудованій нами моделі не вистачає однієї ланки. Дійсно, припустимо, нам потрібно, щоб час у нашій сторінці проставляється на основі часового поясу користувача. Але як сценарій дізнається, який часовий пояс у регіону, в якому живе ця людина (або будь-яку іншу інформацію, яку може надати користувач)? Мабуть, повинен бути якийсь механізм, який дозволить користувачеві не тільки одержувати, але також і передавати інформацію серверу (в даному випадку, наприклад, поправку часу в годинах щодо Києва). Це також забезпечує CGI.