CGI (Common Gateway Interface, общий интерфейс шлюза) – это стандартный протокол, который позволяет почти любому веб-серверу взаимодействовать с программами на сервере для генерации динамических веб-страниц. CGI-скрипты могут быть написаны на самых разных языках программирования, таких как Perl, Python, LUA, Ruby, PHP и другие. С их помощью можно создавать интерактивные элементы на веб-сайтах, например, формы, обратную связь, корзины для покупок и т.д.
Шлюзом тут является веб-сервер, который получает запрос от клиента, преобразует в CGI-форму, вызывает обработчик и конвертирует его ответ из CGI-формы в форму HTTP-ответа клиенту. По сути позволяет использовать консоль ввода и вывода для взаимодействия с клиентом.
Сам интерфейс разработан таким образом, чтобы можно было использовать любой язык программирования, который может работать со стандартными устройствами ввода-вывода. Такими возможностями обладают даже скрипты для встроенных командных интерпретаторов операционных систем, поэтому в простых случаях могут использоваться даже командные скрипты.
Все скрипты, как правило, помещают в каталог cgi (или cgi-bin) сервера, но это не обязательно: скрипт может располагаться где угодно, но при этом большинство веб-серверов требует специальной настройки. В веб-сервере Apache, например, такая настройка может производиться при помощи общего файла настроек httpd.conf или с помощью файла .htaccess в том каталоге, где содержится этот скрипт.
Обобщенный алгоритм работы через CGI можно представить в следующем виде:
- Клиент запрашивает CGI-приложение по его URI.
- Веб-сервер принимает запрос и устанавливает переменные окружения, через них приложению передаются данные и служебная информация.
- Веб-сервер перенаправляет запросы через стандартный поток ввода (stdin) на вход вызываемой программы.
- CGI-приложение выполняет все необходимые операции и формирует результаты в виде HTML.
- Сформированный гипертекст возвращается веб-серверу через стандартный поток вывода (stdout). Сообщения об ошибках передаются через stderr.
- Веб-сервер передает результаты запроса клиенту.
Области применения CGI
Наиболее частая задача, для решения которой применяется CGI — создание интерактивных страниц, содержание которых зависит от действий пользователя. Типичными примерами таких веб-страниц является форма регистрации на сайте или форма для отправки комментария. Другая область применения CGI, остающаяся за кулисами взаимодействия с пользователем, связана со сбором и обработкой информации о клиенте: установка и чтение «печенюшек»-cookies; получение данных о браузере и операционной системе; подсчет количества посещений веб-страницы; мониторинг веб-трафика и т.п.
Это обеспечивается возможностью подключения CGI-скрипта к базе данных, а также возможностью обращаться к файловой системе сервера. Таким образом CGI-скрипт может сохранять информацию в таблицах БД или файлах и получать ее оттуда по запросу, чего нельзя сделать средствами HTML.
CGI ранее был одним из наиболее распространённых средств создания динамических сайтов.