CGI
CGI (від англ. Common Gateway Interface — «загальний інтерфейс шлюзу») — стандарт інтерфейсу, який використовується для організації взаємодії програми веб-сервера із зовнішньою програмою. Програму, яка працює за таким інтерфейсом спільно з веб-сервером, прийнято називати шлюзом. Також вживаються терміни «скрипт» (сценарій) або «CGI-програма».
Сам інтерфейс розроблений таким чином, щоб можна було використовувати будь-яку мову програмування. Для обміну даними використовуються стандартні інтерфейси вводу/виводу.
Всі скрипти, як правило, розміщують в каталог cgi-bin сервера, однак це не є обов'язковою умовою: скрипт може знаходитися де завгодно. Також може знадобитися налаштування веб-сервера для роботи із програмою-шлюзом. В Apache, наприклад, таке налаштування може бути виконане у загальному файлі налаштувань httpd.conf або за допомогою файлу .htaccess в тому каталозі, де розміщено скрипт. Також Apache дозволяє запускати всі скрипти із розширенням .cgi.
CGI був одним з найпоширеніших засобів створення динамічних веб-сторінок.
Призначення інтерфейсу CGI
Інтерфейс CGI виконує функції шлюзу між різними програмами, встановленими на web-сервері, і браузерами користувачів. Коли браузер запитує певний ресурс, web-сервер запускає програму, яка вже повертає результат в браузер користувача. Використання CGI-програм потрібно, коли необхідно в браузері користувача показати сторінку, сформовану на основі будь-яких дій користувача. Наприклад, коли користувачі вводять в форму будь-які дані, а на їх основі формується посилається вам сторінка. CGI-програма може також визначити IP-адресу вашого комп'ютера в мережі, і на основі його визначити вашу країну, в результаті передавши вам html документ вашою рідною мовою!
Механізм CGI перенаправляє висновок програми на web-сервер, а той, у свою чергу, в браузер користувача. З точки зору програми немає нічого незвичайного — вона лише виводить інформацію. Абсолютно будь-яка програма не може бути CGI-програмою, тому що перед своїм висновком вона повинна вивести певні заголовки сервера — вказати хоча б тип виведеної інформації. Наприклад, якщо користувач хоче вивести картинку, він повинен відправити заголовок Content-type: image / gif
. Якщо CGI-програмі потрібно передати параметри, то робиться це дуже просто — як і у випадку зі звичайною програмою. Наприклад, потрібно передати рядок запиту name=Ivan&email=ivan@ivanov.com сценарієм cgi.exe
. Для цього необхідно викликати програму cgi.exe з вказаною рядком запиту: cgi.exe name=Ivan&email=ivan@ivanov.com.
Розділяють параметри за допомогою символу &. Бачили коли-небудь на сторінці кілька полів введення і перемикачів, а під ними кнопку «Відправити»? Це і є форма, з її допомогою можна автоматизувати процес передачі даних сценарієм. Зрозуміло, сценарій знову ж повинен адекватно зреагувати на ці параметри: провести розбір рядка, створити змінні й т. д. Слід звернути увагу на те, що всі ці дії доведеться програмувати вручну, якщо користуватися мовою Сі. PHP розбирає параметри рядка запиту самостійно.
Такий спосіб посилки параметрів сценарієм (коли дані містяться в командний рядок URL) називається методом GET. Фактично, навіть якщо не передається ніяких параметрів (наприклад, при завантаженні статичної сторінки), все одно застосовується метод GET. Однак, існує ще один поширений спосіб — передача параметрів запиту методом POST.
Якщо програма призначена для CGI, то потрібно подбати про взаємодію з сервером. Найпростіше взаємодія полягає в тому, що програміст повинен знати інформацію про сервер. Дана інформація передається за допомогою змінних оточення.
Способи створення 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) (англ.)
Див. також
- FastCGI
- SCGI
- PCGI
- WSGI — «віскі», стандарт взаємодії між Python-програмою і веб-сервером