25 lines
2.3 KiB
Markdown
25 lines
2.3 KiB
Markdown
- Common Gateway Interface
|
||
- Простейший механизм вызова пользователем программ на стороне сервера
|
||
- Данные отправляются программе посредством HTTP-запроса, формируемого веб-браузером
|
||
- То, какая именно программа будет вызвана, обычно определяется [URL](../Основы/URI.md) запроса
|
||
- Каждый запрос обрабатывается отдельным процессом CGI-программы
|
||
- Взаимодействие программы с веб-сервером осуществляется через `stdin` и `stdout`
|
||
## Жизненный цикл CGI-запроса
|
||
1. Браузер присылает HTTP-запрос `POST /api/check?id=5` с телом `x=1&y=2`
|
||
2. Веб-сервер (например Apache Httpd) создает новый процесс в ОС и запускает скомпилированную программу
|
||
3. Метаданные (заголовки и тп) кладутся в переменные окружения, тело запроса отправляется в `stdin`
|
||
4. Программа выполняется как будто с ней взаимодействует пользователь в консоли
|
||
5. Веб-сервер забирает ответ из `stdout`
|
||
6. ОС убивает процесс запущенной программы
|
||
## Достоинства
|
||
- Программы могут быть написаны на множестве ЯПов
|
||
- Падение CGI-сценария не приводит к падению всего сервера
|
||
- Исключены конфликты при параллельной обработке нескольких запросов
|
||
- Хорошая поддержка веб-серверами
|
||
## Недостатки
|
||
- Высокие накладные расходы на создание нового процесса в ОС
|
||
- Плохая масштабируемость
|
||
- Слабое разделение уровня представления и бизнес-логики
|
||
- Могут быть платформо-зависимы
|
||
|
||
Как развитие - [FastCGI](FastCGI.md) |