<-
Apache > HTTP сервер > Документация > Версия 2.0

Использование обработчиков в Apache

Доступные языки:  en  |  ja  |  ko  |  ru 

Этот документ описывает использование обработчиков (handlers) в Apache

top

Что такое обработчик

Обработчик является внутренней структурой Apache, которая задает поведение сервера при обработке запрашиваемого файла. Как правило, каждому файлу соответствует свой внутренний обработчик, который назначается сервером, исходя из типа файла. Обычно файлы просто возвращаются пользователю, но некоторые типы файлов предварительно обрабатываются (handled) сервером.

В Apache 1.1 добавлена возможность использовать обработчики явно. Причем обработка файлов может основываться теперь не только на их типе, но и на расширении файлов или их местонахождении. Это представляется наиболее удачным решением, во-первых потому, что это решение элегантно, а во-вторых, это позволяет ассоциировать с файлом как тип, так и обработчик. (См. также "Файлы с несколькими расширениями")

Обработчики могут представлять из себя как вкомпилированные в сервер (или подключаемые с помощью модулей) функции, или они могут быть добавлены с помощью директивы Action. В стандартном дистрибутиве сервера имеются следующие встроенные обработчики:

top

Примеры

Обработка статического содержимого документа CGI-скриптом

При использовании следующих директив, каждый запрос файла с расширением html будет запускать на выполнение CGI-скрипт footer.pl для предварительной обработки запрашиваемого файла.

Action add-footer /cgi-bin/footer.pl
AddHandler add-footer .html

В этом случает CGI-скрипт ответственен за то, чтобы выслать пользователю запрошенный документ (на который указывает переменная окружения PATH_TRANSLATED), сделав в нем предварительно все необходимые изменения.

Файлы с HTTP заголовками

Следующие несколько директив заставят выполняться обработчик send-as-is, который используется для файлов, содержащих свои собственные HTTP-заголовки. Все файлы в каталоге /web/htdocs/asis/ будут обрабатываться обработчиком send-as-is, независимо от их расширения.

<Directory /web/htdocs/asis>
SetHandler send-as-is
</Directory>

top

Замечание для программистов

Для того чтобы можно было использовать обработчики, в Apache API были внесены некоторые дополнения. В частности в структуру request_rec было добавлено новое поле:

char *handler

Если вы хотите в своем модуле использовать обработчик, то все, что вам надо сделать, это записать в r->handler имя соответствующего обработчика, причем сделать это необходимо перед тем, как запрос доходит до стадии invoke_handler. Обработчики реализуются точно так же, как и раньше, за исключением лишь того, что теперь необходимо указывать имя обработчика, а не тип содержимого (content type). Хотя это и не является обязательным, но существуют следующие правила именования обработчиков - необходимо использовать слова, разделенные дефисом и не содержащие косых черт - это позволит не пересекаться с пространством имен медиа-типов (media type).

Доступные языки:  en  |  ja  |  ko  |  ru