CGI (Common Gateway Interface)#

CGI (Common Gateway Interface) определяет способ взаимодействия веб-сервера с внешними программами, генерирующими контент. В Tomcat поддержка CGI может быть добавлена, если Tomcat используется в качестве HTTP-сервера. Поддержка CGI реализована с использованием сервлета класса org.apache.catalina.servlets.CGIServlet. Обычно данный сервлет сопоставляется с шаблоном URL /cgi-bin/*. По умолчанию поддержка CGI отключена.

Установка CGI#

Чтобы включить поддержку CGI:

  1. В файле $CATALINA_BASE/conf/web.xml есть закомментированные примеры элементов servlet и servlet-mapping. Чтобы включить поддержку CGI в веб-приложении, скопируйте данные объявления сервлета и servlet-mapping в файл WEB-INF/web.xml требуемого веб-приложения.

  2. Раскомментируйте сервлет servlet-mapping в файле $CATALINA_BASE/conf/web.xml, чтобы включить CGI для всех установленных веб-приложений одновременно.

  3. Установите атрибут privileged="true" для элемента Context требуемого веб-приложения.

Только привилегированные Context могут использовать CGI-сервлет.

Примечание

Обратите внимание, что изменение глобального файла $CATALINA_BASE/conf/context.xml влияет на все веб-приложения.

Настройка CGI#

Существует несколько параметров инициализации, которые можно использовать для настройки CGI-сервлета:

Параметры инициализации#

Параметр

Описание

cgiMethods

Список HTTP-методов, разделенных запятыми. Запросы, использующие один из данных методов, будут переданы CGI-скрипту для генерации ответа. По умолчанию - GET,POST. Используйте *, чтобы скрипт обрабатывал все запросы независимо от метода

cgiPathPrefix

Путь поиска CGI, начинающийся с корневого каталога веб-приложения, + File.separator + префикс. По умолчанию значение отсутствует. Рекомендуемое значение - WEB-INF/cgi

cmdLineArgumentsDecoded

Если аргументы командной строки включены (через enableCmdLineArguments), каждый декодированный аргумент командной строки должен соответствовать данному шаблону, иначе запрос будет отклонен

cmdLineArgumentsEncoded

Если аргументы командной строки включены, каждый закодированный аргумент командной строки должен соответствовать данному шаблону, иначе запрос будет отклонен. По умолчанию соответствует допустимым значениям, определенным RFC3875 CGI: [\w\Q%;/?:@&,$-.!~*'()\E]+

enableCmdLineArguments

Генерация аргументов командной строки из строки запроса в соответствии с разделом 4.4 RFC3875 CGI. По умолчанию - false

environment-variable-

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

executable

Имя исполняемого файла, используемого для запуска скрипта. По умолчанию - perl

executable-arg-1, …

Дополнительные аргументы для исполняемого файла. Они предшествуют имени CGI-скрипта. Значения по умолчанию отсутствуют

envHttpHeaders

Регулярное выражение для выбора HTTP-заголовков, передаваемых CGI-процессу в качестве переменных окружения. По умолчанию - ACCEPT[-0-9A-Z]*, CACHE-CONTROL, COOKIE, HOST, IF-[-0-9A-Z]*, REFERER, USER-AGENT

parameterEncoding

Кодировка параметров, используемая CGI-сервлетом. По умолчанию - System.getProperty("file.encoding","UTF-8")

passShellEnvironment

Передача окружения оболочки из процесса Tomcat в CGI-скрипт. По умолчанию - false

stderrTimeout

Время ожидания завершения чтения stderr (в миллисекундах) перед завершением CGI-процесса. По умолчанию - 2000

Выполнение CGI-скрипта зависит от конфигурации CGI-сервлета и того, как запрос сопоставляется с CGI-сервлетом. Путь поиска CGI начинается с корневого каталога веб-приложения + File.separator + cgiPathPrefix. Затем ищется pathInfo, если он не равен null, в противном случае ищется servletPath.

Поиск начинается с первого сегмента пути и расширяется, пока не закончатся сегменты (что приводит к ошибке 404) или не будет найден скрипт. Оставшиеся сегменты пути передаются в переменную окружения PATH_INFO.