2.6. CGI - Common Gateway Interface

CGI - Common Gateway Interface є стандартом інтерфейсу (зв'язку) зовнішньої прикладної програми з інформаційним сервером типу HTTP, Web сервер.

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

Програма-шлюз запускається WWW сервером уреальному масштабі часу. WWW сервер забезпечує передачу запиту користувача шлюзу, авона усвою чергу, використовуючи засобу прикладної системи, повертає результат обробки запиту на екран користувача. Програма-шлюз може бути закодована на мовах C/C++, Fortran, Perl, TCL, Unix Schell, Visual Basic, Apple Script. Як здійсненний модуль, вона записується в піддиректорій зім'ям cgi-bin WWW сервера.

Оригінал опису CGI інтерфейсу - інструмента зв'язку програма-шлюз з WWW сервером знаходиться увузлі wist.ifmo.ru .

Передача даних шлюзам

Для передачі даних про інформаційний запит від сервера до шлюзу, сервер використовує командний рядок і перемінні оточення. Ці перемінні оточення встановлюються втой момент, коли сервер виконує програму шлюзу. Запити для різних методів

Інформація шлюзам передається внаступній формі: ім 'я=значення&ім 'я1=значення1&..,

де ім 'я- ім'я перемінної (з оператора FORM, наприклад), і значення - її реальне значення. У залежності від методу, що використовується для запиту, цей рядок чи з'являється як частина URL (у випадку методу GET), чи як уміст HTTP запиту (метод POST). Востанньому випадку, ця інформація буде послана шлюзу в стандартний потік уведення.

На файловий дескриптор стандартного потоку введення посилається CONTENT LENGTH байт. Так само сервер передає шлюзу CONTENT TYPE (тип переданих даних). Сервер не зобов'язаний посилати символ кінця файлу після відсилання CONTENTLENGTH байт даних іпісля того, як шлюз їхній прочитає. Приклад

Візьмемо результат роботи форми зметодом POST (METHOD="POST") як приклад. Нехай

отримано 7 байт, закодованих приблизно так:

a=b&b=c

Уцьому випадку, сервер установить значення CONTENT LENGTH рівним 7 і CONTENT TYPE у application/x-www-form-urlencoded. Першим символом у стандартному потоці введення для шлюзу буде "a", за яким буде випливати залишок закодованого рядка.