Про CGI (Common Gateway Interface)

CGI (Common Gateway Interface) — это стандарт, который позволяет веб-серверу запускать внешние программы (обычно известные как CGI-скрипты) для обработки пользовательских запросов и генерации динамического содержимого. Эти CGI-скрипты могут быть написаны на различных языках программирования, включая Perl, Python, Ruby и PHP.

CGI шлюз — это интерфейс который работает таким образом, чтобы можно было использовать любой язык программирования (php, perl, python), который может работать со стандартными устройствами ввода-вывода.

Как CGI работает с PHP

1. Веб-сервер получает HTTP-запрос.

Когда пользователь делает запрос к сайту (например, через браузер), веб-сервер (такой как Apache или Nginx) первоначально получает этот запрос.

2. Определяется необходимость запуска PHP скрипта.

Если запрашиваемый ресурс должен быть обработан PHP-скриптом, веб-сервер передаёт запрос через интерфейс CGI к исполнимому файлу php-cgi (интерпретатору).

3. Передача данных запроса и запуск скрипта.

PHP запускается как CGI-скрипт в отдельном процессе, через Common Gateway Interface (CGI), передача данных между веб-сервером и PHP происходит через переменные окружения и (для некоторых типов запросов как POST/PUT) через стандартные потоки ввода-вывода.

Вот как это организуется:

  • Переменные окружения.
    Веб-сервер устанавливает ряд переменных окружения перед тем, как запустить CGI-скрипт. Эти переменные содержат информацию о запросе и сервере. PHP скрипт может получить доступ к этим переменным через суперглобальный массив $_SERVER в PHP. Некоторые из ключевых переменных окружения включают:
    • SCRIPT_NAME: путь к исполняемому скрипту.
    • REQUEST_METHOD: метод HTTP-запроса (например, GET или POST).
    • QUERY_STRING: строка запроса для метода GET, содержащая параметры и их значения.
    • CONTENT_TYPE: MIME-тип данных, отправляемых в теле запроса (важен для запросов POST и PUT).
    • CONTENT_LENGTH: длина тела запроса в байтах (также для POST и PUT).
    • HTTP_*: все HTTP-заголовки, отправленные браузером (например, HTTP_USER_AGENT, HTTP_COOKIE и т.д.), доступные в PHP как $_SERVER['HTTP_USER_AGENT']$_SERVER['HTTP_COOKIE'] и так далее.
  • Стандартный ввод (STDIN).
    Для некоторых типов HTTP-запросов, таких как POST и PUT, данные запроса не передаются через переменные окружения. Вместо этого, данные с телом запроса передаются через стандартный ввод (STDIN). В PHP вы можете читать эти данные используя php://input или функцию fopen('php://stdin', 'r').

    Это важно, например, при получении JSON или XML данных, или данных из форм, отправленных с типом multipart/form-data или application/x-www-form-urlencoded.

5. Формирование ответа.

PHP скрипт генерирует ответ, который может включать HTML-код, заголовки ответа и другие данные. Выходной поток отправляется обратно веб-серверу через стандартный вывод (STDOUT).

6. Веб-сервер отправляет ответ пользователю.

Веб-сервер получает данные от CGI и отправляет их в браузер пользователя как ответ на исходный запрос.

Недостатки CGI

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

Полезные ссылки


Андрей Писаревский

Автор: Андрей Писаревский 

PHP | WordPress Team Lead. Имею коммерческий опыт в программировании с 2010 года и экспертизу в полном цикле веб разработки: Frontend, Backend, QA, Server administration, управление крупными командами и Enterprise проектами.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *