Раздел 11. Документация для разработчиков RU EN Пункт 220. Обработка запросов в версии 2.x Предупреждение — это первый (быстрый) черновик, который нуждается в доработке! Некоторые изменения в версии 2.0 и выше влияют на внутреннюю механику обработки запросов. Авторы модулей должны знать об этих изменениях, чтобы они могли воспользоваться оптимизацией и улучшениями безопасности. Первое серьезное изменение касается механизмов подзапроса и перенаправления. В Apache HTTP Server 1.3 было несколько различных путей кода, чтобы попытаться оптимизировать поведение подзапроса или перенаправления. Когда в версию 2.0 были внесены исправления, эти оптимизации (и поведение сервера) были быстро нарушены из-за дублирования кода. Весь повторяющийся код был свернут обратно Это означает, что большая часть существующего кода была «неоптимизированной». Первой целью проекта Apache HTTP является создание надежной и правильной реализации RFC для HTTP-сервера. Дополнительные цели включают безопасность, масштабируемость и оптимизацию. Были найдены новые методы оптимизации сервера (помимо производительности 1.3) без добавления ненадежного или небезопасного кода. Цикл обработки запросаВсе запросы проходят через Чтобы упростить запросы, автор модуля может воспользоваться хуками, предлагаемыми для раннего выхода из цикла запроса, или для обхода основных хуков, которые не имеют значения (и затратны с точки зрения ЦП). Фаза разбора запросаОтменяет экранирование URLПуть запроса Этот шаг пропускается, если установлен флаг proxyreq или
Удаляет родительский и этот элементы из URIВсе элементы Этот шаг нельзя обойти. Прогулка по начальному местоположению URIКаждый запрос подлежит звонку
translate_nameНа этом шаге модули могут определить имя файла или изменить заданный URI. Например, Если все модули Хук: map_to_storageПосле определения файла или правильного URI соответствующие конфигурации для каждого каталога объединяются. Например, Прогулка по местоположению URIКаждый запрос усиливается вторым
Хук: header_parserЗатем основной запрос анализирует заголовки клиента. Это подготавливает оставшиеся этапы обработки запроса для лучшего обслуживания запроса клиента. Этап безопасностиНужна документация. Код: если ((access_status = ap_run_access_checker(r)) != 0) { вернуть decl_die(access_status, "проверить доступ", r); } если ((access_status = ap_run_check_user_id(r)) != 0) { вернуть decl_die(access_status, "проверить пользователя", r); } если ((access_status = ap_run_auth_checker(r)) != 0) { return decl_die(access_status, "проверить авторизацию", r); } Фаза подготовкиХук: type_checkerМодули имеют возможность проверить URI или имя файла на соответствие целевому ресурсу и установить MIME-информацию для запроса. Оба Если все модули Крючок: исправленияМногие модули «побеждены» какой-то фазой выше. Фаза исправления используется модулями, чтобы «подтвердить» свое право собственности или принудительно установить для полей запроса соответствующие значения. Это не всегда самый чистый механизм, но иногда это единственный вариант. Фаза обработчикаЭтот этап не является частью обработки в
Хук: insert_filterМодули, которые каким-либо образом преобразуют содержимое, могут вставлять свои значения и переопределять существующие фильтры, так что, если пользователь настроил более сложный фильтр не по порядку, модуль может изменить свой порядок по мере необходимости. Кода результата нет, поэтому действиям в этом хуке лучше доверять, чтобы они всегда были успешными. Крючок: обработчикМодуль, наконец, получает возможность обслужить запрос в своем обработчике. Обратите внимание, что не каждый подготовленный запрос отправляется в хук обработчика. Многие модули, такие как |