Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Обработка запросов




 

Большинство модулей Apache имеют непосредственное отношение к обработке клиентских запросов, участвуя в этом процессе в определенной последовательности. Такой подход позволяет каждому модулю сфокусироваться на узком аспекте обработки.

Веб-сервер возвращает клиенту ответ, формируемый генератором контента. Любой модуль может зарегистрировать свой генератор с помощью директив SetHandler или AddHandler в файле httpd.conf. Если такой регистрации нет, то генератор по умолчанию просто возвращает файл, получаемый напрямую из запроса. Модули, которые реализуют свои собственные генераторы, называются контент-генераторами. Такой генератор в принципе может управлять всеми функциями. Например, CGI программа, получившая запрос, генерирует ответ, полностью контролируя этот процесс.

Apache разбивает запрос на несколько фаз, например, проверяет авторизацию пользователя. Непосредственно самой генерации предшествуют несколько стадий, например:

  1. URL проверяется на предмет наличия для него предопределенного конфигурационного генератора контента.
  2. URL транслируется на файловую систему, результатом чего может быть статичный файл, CGI-скрипт.
  3. Может быть включен модуль mod_negotiation для определения версии ресурса.
  4. Может происходить проверка доступа.
  5. Модули mod_alias или mod_rewrite могут изменить текущий URL.

Запрос может быть обработан нестандартным образом в силу следующих причин:

  1. Может быть сгенерирован дополнительный вложенный запрос или выдан документ с ошибкой.
  2. Могут быть добавлены дополнительные фазы обработки запроса.
  3. Хук (hook) quick_handler может быть запущен модулем кеширования.

Для изменения процесса обработки запроса существует механизм хуков. К ним в первую очередь относятся:

  1. post_read_request — этот хук может быть запущен на ранней стадии обработки запроса.
  2. translate_name — трансляция URL.
  3. map_to_storage — читает опции конфигурации.
  4. header_parser — запускается в начале обработки для чтения заголовков.
  5. access_checker — этот хук может заменить стандартную логику проверки прав доступа.
  6. check_user_id — назначает аутентификацию.
  7. type_checker — назначает обработчик контента.
  8. fixups — применяется непосредственно перед генерацией контента для его окончательной корректировки, один из наиболее часто используемых хуков.
  9. handler — отсылает контент клиенту.

Модуль может использовать хуки в любой точке обработки запроса. В дополнение к этим стандартным хукам модуль может определить свои собственные хуки.

Главным отличием второго Apache является появление фильтров. Фильтры бывают входящими и выходящими. Когда стоит дилемма в выборе между хуком и фильтром, фильтр нужно реализовывать случае, если модуль обрабатывает входные и выходные данные и используется во многих приложениях.

Примеры модулей, реализованных как фильтры:

  1. mod_include — подключает скрипты.
  2. mod_ssl — реализует защищенный протокол.
  3. обработка картинок.
  4. mod_form, mod_upload — обработка форм и загрузок.
  5. mod_deflate — сжатие данных.

Обычно каждый модуль Apache декларирует набор данных и функций:

module AP_MODULE_DECLARE_DATA my_module = { STANDARD20_MODULE_STUFF, /* версионность */ my_dir_conf, /* локальная конфигурация */ my_dir_merge, my_server_conf, /* генеральная конфигурация */ my_server_merge, my_cmds, /* директивы конфигурации */ my_hooks /* обработчики, регистрируемые в ядре */ };

 

Функция для обработки запроса:

static void my_hooks(apr_pool_t *pool) { ... }

 

Хук для генератора контента:

ap_hook_handler(my_handler, NULL, NULL, APR_HOOK_MIDDLE);

 

Когда начнется генерация контента, будет вызван my_handler:

static int my_handler(request_rec *r) { ... }

 




Поделиться с друзьями:


Дата добавления: 2014-01-05; Просмотров: 586; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.