Стать клиентом

CGI: Common Gateway Interface

CGI: Common Gateway Interface
Андрей Гусаров, директор GUSAROV·Обновлено 05.11.2026·5 мин

Common Gateway Interface (CGI) — это интерфейс для связи внешней программы с веб-сервером, на котором размещён сайт: по запросу посетителя сервер запускает программу (CGI-скрипт) и отдаёт её результат как ответ, поэтому страницы получаются динамическими.

Кратко

  • Как работает: сервер получает запрос, запускает программу, передаёт ей данные запроса через переменные окружения и стандартный ввод, а всё, что программа выводит, возвращает посетителю.
  • CGI описан в RFC 3875 как сложившаяся с 1993 года практика, а не как стандарт IETF. Это интерфейс, а не язык: скрипт можно написать на разных языках.
  • На каждый запрос запускается отдельный процесс, поэтому на нагруженных сайтах CGI заменяют модулями сервера, FastCGI и подобными решениями.
  • Слово «CGI» значит и компьютерную графику (computer-generated imagery). Эта страница только о веб-серверах.

Кому и зачем это знать

С запросом «CGI» приходят люди с разными задачами. Найдите свою ситуацию.

Владелец сайтаСитуация: Хостинг пишет «поддерживается CGI», а подрядчик говорит, что форма заявок работает через CGI-скрипт.Зачем: CGI это один из способов, которым сайт запускает свои программы. Если обработчик формы или старый модуль построен на нём, от него зависят заявки, а значит и ваши продажи.Что сделать: Спросите у разработчика три вещи: какие формы и страницы работают через CGI-скрипты, на каком языке они написаны и кто их поддерживает. Если скрипту много лет, попросите проверить, как он обрабатывает данные из формы: по RFC 3875 скрипт не должен доверять тому, что прислал посетитель.
РазработчикСитуация: Нужно запустить на сервере скрипт или выбрать способ, как сайту обрабатывать динамические запросы.Зачем: CGI самый простой по идее вариант, но на каждый запрос создаётся новый процесс, и по оценке Wikipedia это может стоить больше процессора и памяти, чем сама работа скрипта.Что сделать: Для небольшой нагрузки и редких запросов CGI подойдёт. Если трафика много, рассмотрите модули веб-сервера, FastCGI или SCGI (долгоживущие процессы вне сервера) либо WSGI для Python. Личные и платёжные данные принимайте в теле POST-запроса, а не в адресе: так советует RFC 3875.
Маркетолог, SEO-специалистСитуация: В отчёте краулера или в аналитике видны адреса с параметрами, и разработчик говорит, что страницы формирует скрипт.Зачем: Строку после знака вопроса сервер передаёт скрипту в переменной QUERY_STRING, а код ответа (в том числе «страница не найдена») скрипт задаёт сам заголовком Status. Значит, правильные ответы и аккуратные адреса зависят от кода скрипта.Что сделать: Выпишите адреса, которые отдаёт скрипт, и попросите разработчика проверить, что на несуществующий адрес приходит нужный код ответа, а одну и ту же страницу нельзя открыть по нескольким адресам.
Новичок, студентСитуация: Встретили «CGI» в статье про сайты или в задании.Зачем: Аббревиатура многозначная: в кино и играх CGI это компьютерная графика, а в вебе это интерфейс запуска программ на сервере.Что сделать: Запомните: в контексте сайтов CGI отвечает на вопрос «как веб-сервер запускает программу и получает от неё готовую страницу». Разберите таблицу «как проходит запрос» ниже и найдите на любом сайте форму: её обработчик и есть та самая программа.

Как работает CGI: путь запроса от посетителя до ответа

Сервер отвечает за соединение и передачу данных, а скрипт за логику приложения: работу с данными и обработку документов. Так распределены роли в RFC 3875. Путь запроса состоит из четырёх шагов.

ШагЧто происходитДеталь
1. ЗапросПосетитель открывает страницу или отправляет форму, браузер шлёт запрос серверуСервер по адресу решает, что обрабатывать должен скрипт
2. ЗапускСервер запускает программу в новом процессеЭто и есть главная особенность и главный недостаток CGI
3. Передача данныхПараметры запроса попадают в переменные окружения (REQUEST_METHOD, QUERY_STRING и другие), тело POST-запроса читается из стандартного вводаЗаголовки запроса приходят переменными вида HTTP_*
4. ОтветПрограмма печатает результат в стандартный вывод: заголовки (Content-Type, Location, Status) и тело, чаще всего HTMLСервер отправляет это браузеру как ответ

В RFC 3875 определены методы GET, POST и HEAD, причём GET должен быть безопасным и повторяемым. Поэтому действия вроде отправки заказа делают через POST.

Где применяется CGI и что пришло ему на смену

CGI появился в начале 1990-х и стал первым распространённым способом сделать веб-страницу интерактивной, например обработать отправленную форму. Многие крупные серверы, включая Apache и Microsoft IIS, поддерживают его до сих пор. Что выбрать сегодня, зависит от нагрузки и сложности приложения.

ПодходКак работаетЧем отличается от CGI
CGIНовый процесс на каждый запросПростая схема, но дорогой запуск при большом трафике
Модули веб-сервера (mod_php, mod_perl, mod_python)Обработка выполняется внутри сервераОдин долгоживущий процесс обслуживает много запросов
FastCGI, SCGIПриложение живёт отдельно от сервера и общается с ним через сокетМеньше памяти, чем у модулей, и приложение не зависит от сервера
WSGIИнтерфейс между Python-приложением и сервером (PEP 3333)Только для Python, работает через mod_wsgi, Gunicorn, uWSGI

Если ваш сайт работает на готовой системе управления, подрядчик сам выбирает способ запуска; вам важно знать, что такая настройка есть и от неё зависит скорость ответа сервера.

Нужен ли CGI вашему сайту и как это выяснить

Ответить по одному признаку нельзя: поддержка CGI на хостинге не означает, что сайт её использует. Сверьте то, что видите, с таблицей.

Что видитеЧто это значитЧто делать
Хостинг указывает «поддерживается CGI»Сервер умеет запускать такие программы. Использует ли их ваш сайт, это отдельный вопросСпросите разработчика, есть ли на сайте CGI-скрипты
Форма отправляется на адрес скриптаОбработчик может быть CGI-программой, но может быть и другой технологиейПопросите разработчика назвать технологию обработчика и язык
Сайт замедляется при росте посетителейОдна из возможных причин: процесс на каждый запрос. Причин может быть многоИзмерьте время ответа сервера и обсудите с разработчиком FastCGI или модуль
Скрипту много лет, автора нетРиск ошибок обработки данных и прав доступа (RFC 3875: скрипт работает с правами сервера)Закажите проверку безопасности или замену скрипта

CGI и соседние понятия: Script, API, PHP

CGI часто путают с языком или с самим скриптом, хотя это правила обмена между сервером и программой. В отличие от CGI, PHP это язык программирования, а mod_php встраивает его обработку прямо в сервер.

ПонятиеЧто этоОтличие от CGI
CGIИнтерфейс между веб-сервером и внешней программойОпределяет, как программа получает запрос и возвращает ответ
ScriptПрограмма, автоматизирующая действияCGI-скрипт это скрипт, запускаемый по правилам CGI; бывают и скрипты в браузере
APIИнтерфейс обмена между программамиCGI это один конкретный интерфейс сервера и программы, а не общий формат обмена данными
PHPЯзык программирования для сайтовЯзык, а не интерфейс; Wikipedia называет mod_php способом встроить обработку в сервер как альтернативу CGI

Что делать маркетологу и владельцу сайта

Личные данные из формы передавайте в теле запроса, а не в адресе страницы. Остальные типовые ситуации разобраны в таблице.

СитуацияЧто сделать
Подрядчик предлагает «переписать скрипты формы»Попросите описать, на какой технологии они работают сейчас, и что изменится в скорости и безопасности
Страница отвечает медленноСначала измерьте время ответа сервера, затем разбирайтесь, связано ли это со способом запуска программ
Нужно понять, что видят пользователи и серверОткройте инструменты разработчика в браузере и посмотрите запрос и ответ (см. «Читайте дальше»)
Форма принимает личные данныеУбедитесь, что данные передаются в теле запроса, а не в адресе страницы

Типичные ошибки

  • Считать CGI языком программирования: это интерфейс, а программа может быть написана на разных языках.
  • Путать CGI с компьютерной графикой (computer-generated imagery).
  • Думать, что строка «поддерживается CGI» на хостинге означает, что сайт сам работает через CGI.
  • Принимать данные формы в скрипте без проверки: скрипт не должен делать предположений о том, что прислал посетитель.
  • Передавать личные данные в адресе страницы вместо тела POST-запроса.

Частые вопросы

Что такое CGI простыми словами?

Это договорённость о том, как веб-сервер запускает внешнюю программу и получает от неё готовую страницу. Посетитель отправил запрос, сервер запустил программу, программа вернула HTML.

Что такое CGI-скрипт?

Программа, которую веб-сервер запускает по запросу посетителя по правилам CGI. Она получает данные запроса через переменные окружения и стандартный ввод, а результат печатает в стандартный вывод.

Как работает CGI?

Сервер принимает запрос, запускает программу в новом процессе, передаёт ей параметры запроса и тело POST-запроса, а затем отправляет браузеру то, что программа вывела.

CGI устарел?

Это один из первых способов сделать сайт динамическим, он появился в начале 1990-х. Многие серверы его всё ещё поддерживают, но для нагруженных сайтов обычно выбирают FastCGI, модули сервера и другие решения.

Чем CGI отличается от FastCGI?

CGI запускает новый процесс на каждый запрос, а FastCGI держит долгоживущее приложение отдельно от сервера и связывается с ним через сокет, что экономит ресурсы.

Влияет ли CGI на скорость сайта?

Может: создание и завершение процесса для каждого запроса иногда требует больше ресурсов, чем сама работа скрипта. Но скорость зависит и от многих других причин, поэтому сначала измерьте время ответа сервера.

CGI в кино и в вебе: это одно и то же?

Нет. В кино и играх CGI означает computer-generated imagery, то есть компьютерную графику. В вебе это Common Gateway Interface, интерфейс запуска программ на сервере.

Связанные термины

  • Script: программа-сценарий; CGI-скрипт это сценарий, который сервер запускает по правилам CGI
  • Сервер: система, на которой работает сайт; CGI описывает, как она запускает программы
  • Хостинг сайта: услуга размещения сайта, в условиях которой указывается поддержка CGI
  • PHP: язык программирования сайтов, а не интерфейс сервера
  • API: Application Programming Interface: общий интерфейс обмена между программами, тогда как CGI связывает именно сервер и программу
Получить кейсы Написать в Telegram
При нахождении на сайте Вы соглашаетесь с политикой обработки персональных данных.
Всё понятно!