cgihttpserver.md
1> **Источник:** https://python-all.ru/2.7/library/cgihttpserver.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 20.20. [`CGIHTTPServer`](https://python-all.ru/2.7/library/cgihttpserver.html#module-CGIHTTPServer) – обработчик HTTP-запросов с поддержкой CGI89> **Примечание**10>11> Модуль [`CGIHTTPServer`](https://python-all.ru/2.7/library/cgihttpserver.html#module-CGIHTTPServer) был объединён с `http.server` в Python 3. Инструмент [2to3](https://python-all.ru/2.7/glossary.html#term-2to3) автоматически адаптирует импорты при преобразовании исходного кода в Python 3.1213Модуль [`CGIHTTPServer`](https://python-all.ru/2.7/library/cgihttpserver.html#module-CGIHTTPServer) определяет класс обработчика запросов, интерфейс совместимый с [`BaseHTTPServer.BaseHTTPRequestHandler`](https://python-all.ru/2.7/library/basehttpserver.html#BaseHTTPServer.BaseHTTPRequestHandler), и наследует поведение от [`SimpleHTTPServer.SimpleHTTPRequestHandler`](https://python-all.ru/2.7/library/simplehttpserver.html#SimpleHTTPServer.SimpleHTTPRequestHandler), но также может запускать CGI-скрипты.1415> **Примечание**16>17> Этот модуль может запускать CGI-скрипты в системах Unix и Windows.1819> **Примечание**20>21> CGI-скрипты, запускаемые классом [`CGIHTTPRequestHandler`](https://python-all.ru/2.7/library/cgihttpserver.html#CGIHTTPServer.CGIHTTPRequestHandler), не могут выполнять перенаправления (HTTP-код 302), поскольку код 200 (вывод скрипта будет отправлен) отправляется до выполнения CGI-скрипта. Это предотвращает установку другого кода состояния.2223Модуль [`CGIHTTPServer`](https://python-all.ru/2.7/library/cgihttpserver.html#module-CGIHTTPServer) определяет следующий класс:2425#### `class CGIHTTPServer.CGIHTTPRequestHandler(request, client_address, server)`2627Этот класс используется для обслуживания как файлов, так и вывода CGI-скриптов из текущего каталога и всех подкаталогов. Обратите внимание, что отображение иерархической структуры HTTP на локальную структуру каталогов в точности такое же, как в [`SimpleHTTPServer.SimpleHTTPRequestHandler`](https://python-all.ru/2.7/library/simplehttpserver.html#SimpleHTTPServer.SimpleHTTPRequestHandler).2829Однако класс будет запускать CGI-скрипт вместо его обслуживания как файла, если он определяет его как CGI-скрипт. Используется только CGI на основе каталогов – другая распространенная конфигурация сервера – обрабатывать специальные расширения как обозначающие CGI-скрипты.3031Функции `do_GET()` и `do_HEAD()` изменены таким образом, чтобы запускать CGI-скрипты и выдавать их результат вместо отдачи файлов, если запрос ведёт в каталог, расположенный ниже пути `cgi_directories`.3233Класс [`CGIHTTPRequestHandler`](https://python-all.ru/2.7/library/cgihttpserver.html#CGIHTTPServer.CGIHTTPRequestHandler) определяет следующий элемент данных:3435#### `cgi_directories`3637По умолчанию имеет значение `['/cgi-bin', '/htbin']` и описывает каталоги, которые следует считать содержащими CGI-скрипты.3839[`CGIHTTPRequestHandler`](https://python-all.ru/2.7/library/cgihttpserver.html#CGIHTTPServer.CGIHTTPRequestHandler) определяет следующие методы:4041#### `do_POST()`4243Этот метод обслуживает запросы типа `'POST'`, разрешённые только для CGI- скриптов. При попытке выполнить POST на не-CGI URL выводится ошибка 501: «Can only POST to CGI scripts».4445Обратите внимание, что CGI-скрипты будут запускаться с UID пользователя nobody по соображениям безопасности. Проблемы с CGI-скриптом будут приводить к ошибке 403.4647Пример использования см. в реализации функции [`test()`](https://python-all.ru/2.7/library/test.html#module-test).4849> **См. также**50>51> **Модуль [`BaseHTTPServer`](https://python-all.ru/2.7/library/basehttpserver.html#module-BaseHTTPServer)**52>53> Реализация базового класса для веб-сервера и обработчика запросов.54