Common Gateway Interface
Common Gateway Interface, CGI — (укр. «загальний інтерфейс шлюзу») — стандарт інтерфейсу, який використовується для організації взаємодії програми вебсервера із зовнішньою програмою. Програму, яка працює за таким інтерфейсом спільно з вебсервером, прийнято називати шлюзом. Також вживаються терміни «скрипт» (сценарій) або «CGI-програма».
Сам інтерфейс розроблений таким чином, щоб можна було використовувати будь-яку мову програмування. Для обміну даними використовуються стандартні інтерфейси вводу/виводу.
Всі скрипти, як правило, розміщують в каталог cgi-bin сервера, однак це не є обов'язковою умовою: скрипт може знаходитися де завгодно. Також може знадобитися налаштування вебсервера для роботи із програмою-шлюзом. В Apache, наприклад, таке налаштування може бути виконане у загальному файлі налаштувань httpd.conf або за допомогою файлу .htaccess в тому каталозі, де розміщено скрипт. Також Apache дозволяє запускати всі скрипти із розширенням .cgi.
CGI був одним з найпоширеніших засобів створення динамічних вебсторінок.
Інтерфейс CGI виконує функції шлюзу між різними програмами, встановленими на web-сервері, і браузерами користувачів. Коли браузер запитує певний ресурс, web-сервер запускає програму, яка вже повертає результат в браузер користувача. Використання CGI-програм потрібно, коли необхідно в браузері користувача показати сторінку, сформовану на основі будь-яких дій користувача. Наприклад, коли користувачі вводять в форму будь-які дані, а на їх основі формується посилається вам сторінка. CGI-програма може також визначити IP-адресу вашого комп'ютера в мережі, і на основі його визначити вашу країну, в результаті передавши вам html документ вашою рідною мовою!
Механізм CGI перенаправляє висновок програми на web-сервер, а той, у свою чергу, в браузер користувача. З точки зору програми немає нічого незвичайного — вона лише виводить інформацію. Абсолютно будь-яка програма не може бути CGI-програмою, тому що перед своїм висновком вона повинна вивести певні заголовки сервера — вказати хоча б тип виведеної інформації. Наприклад, якщо користувач хоче вивести картинку, він повинен відправити заголовок Content-type: image / gif
. Якщо CGI-програмі потрібно передати параметри, то робиться це дуже просто — як і у випадку зі звичайною програмою. Наприклад, потрібно передати рядок запиту name=Taras&surname=Grygorovych сценарієм cgi.exe
. Для цього необхідно викликати програму cgi.exe з вказаною рядком запиту: cgi.exe name=Taras&surname=Grygorovych.
Розділяють параметри за допомогою символу &. PHP розбирає параметри рядка запиту самостійно.
Такий спосіб посилки параметрів сценарієм (коли дані містяться в командний рядок URL) називається методом GET. Фактично, навіть якщо не передається ніяких параметрів (наприклад, при завантаженні статичної сторінки), все одно застосовується метод GET. Однак, існує ще один поширений спосіб — передача параметрів запиту методом POST.
Якщо програма призначена для CGI, то потрібно подбати про взаємодію з сервером. Найпростіше взаємодія полягає в тому, що програміст повинен знати інформацію про сервер. Дана інформація передається за допомогою змінних оточення.
Наведемо приклад CGI-програми на C:
#include <time.h> // Потрібна для ініціалізації функції rand ()
#include <stdio.h> // Включаємо підтримку функцій введення / виводу
#include <stdlib.h> // для підтримки функції rand ()
// Головна функція. Саме вона і запускається при старті сценарію.
void main(void) {
// ініціалізуємо генератор випадкових чисел
int Num; time_t t; srand(time(&t));
// до Num записується випадкове число від 0 до 9
Num = rand()%10;
// далі вводимо заголовки відповіді. Тип - html-документ
printf("Content-type: text/html\n");
// заборона кешування
printf("Pragma: no-cache\n");
// порожній заголовок
printf("\n");
// виводимо текст документа - його ми побачимо в браузері
printf("<html><body>");
printf("Випадкове число в діапазоні 0-9: %d",Num);
printf("</body></html>");
}
- Стандарт CGI 1.1(RFC3875) (англ.)