HTTP обработчик против модуля HTTP


144

Может ли кто-то объяснить менее чем в двух предложениях разницу между обоими? Да, я знаю, что Google может предоставить сотни ответов, но не одно из двух четких предложений :)


В контексте поиска запуска кода перед каждым запросом.
Французский

23
+1 за "да, я знаю, я могу Google это".
Csharp

7
«Менее двух предложений». Мол, одно предложение?
Эндрю Текен

Ответы:


316

HttpHandler - то, куда направляется поезд запроса. HttpModule это станция по пути.


Замечательное объяснение! :)
ТАК Пользователь

3
Я согласен, что это хороший ответ, но не может быть помечен как принятый.
Shrivallabh

Просто гениально !! :)
Ди

4
Технически, не «менее двух предложений». <trollface>
Эндрю Текен

5
Ницца. Я бы добавил, что HttpContext - это поезд. Каждая станция (модуль) вносит свой вклад в HttpContext, проходя мимо.
Дуанне

203

Два предложения:

HttpModule будет выполняться для каждого запроса к вашему приложению, независимо от расширения, и обычно используется для таких вещей, как безопасность, статистика, ведение журнала и т. Д.

HttpHandler обычно ассоциируется с определенным расширением и используется для таких вещей, как RSS-каналы, динамическая генерация или модификация изображений и тому подобное.

Еще немного объяснения, если это не совсем понятно:

Как я думаю о них - модули «подключаются» к конвейеру запросов, тогда как обработчики «обрабатывают» определенное расширение файла. Итак, если у вас есть сайт с LoggingModule и PdfHandler, оба будут выполняться для запроса http://example.com/sample.pdf , а один только модуль регистрации будет выполнять запрос http: // example.com/page.aspx .

Есть довольно четкая статья о разнице в MSDN: обработчики HTTP и обзор модулей HTTP


1
Итак, если я хочу запустить некоторый код, который выполняется при каждом запросе к файлу .aspx, я реализую обработчик, и если я хочу запустить некоторый код при каждом запросе, независимо от типа запрошенного файла, я реализую модуль. Это оно?
Французский

5
@frenchie - Нет. Страницы aspx создаются поверх HttpHandlers, предоставляя вам жизненный цикл страницы. Думайте об этом как о странице aspx, сокращенной до самого основного события. ProcessRequest, Модуль, с другой стороны, будет работать в любой точке жизненного цикла, к которому вы подключены. Для вашего сценария желания запустить что-то до страницы aspx, вам нужен модуль. Однако вам нужно вручную отфильтровать запросы к страницам, которые не являются .aspx
Phill

6
Правильно ли я сказал, что каждый запрос может иметь только один обработчик и несколько модулей?
Мартен Кифт

1
Является ли общий ответ handlers = state, и модули не являются неписаным стандартом или есть что-то принципиально отличное от двух, я имею в виду, может ли человек кодировать модуль так, чтобы он был похож на обработчик, и наоборот, или существуют ограничения для те, которые делают это невозможным?
Рич Бьянко

21

Основная и общая цель HttpHandler и HttpModule - внедрить логику предварительной обработки до того, как запрос ASP.NET достигнет IIS Server.

ASP.NET предоставляет два способа внедрения логики в конвейер запросов;

  1. Обработчики Http: Обработчик Http помогает нам вводить логику предварительной обработки на основе расширения запрашиваемого имени файла. ASP.NET использует обработчики HTTP для реализации многих своих собственных функций. Например, ASP.NET использует обработчики для обработки файлов .aspx, .asmx и trace.axd.

Пример: RSS-каналы. Чтобы создать RSS-канал для веб-сайта, вы можете создать обработчик, который генерирует XML-формат в формате RSS. Поэтому, когда пользователи отправляют запрос на ваш сайт, который заканчивается на .rss, ASP.NET вызывает ваш обработчик для обработки запроса.

Создание обработчика состоит из трех этапов: 1. Реализация интерфейса IHttpHandler. 2. Зарегистрируйте обработчик в файле web.config или machine.config. 3. Сопоставьте расширение файла (* .arshad) с aspnet_isapi.dll в IIS.

Интерфейс IHttpHandler имеет метод ProcessRequest и свойство IsReusable, которое необходимо реализовать. ProcessRequest: в этом методе вы пишете код, который создает выходные данные для обработчика. IsResuable: это свойство указывает, может ли этот обработчик использоваться повторно или нет.

Вы можете зарегистрировать обработчик в файле web.config следующим образом

<httpHandlers>
   <add verb="*" path="*.arshad" type="namespace.classname, assemblyname" />
</httpHandlers>

Примечание: здесь мы обрабатываем любое имя файла с расширением arshad.

  1. Модули Http: HttpModule - это процессор на основе событий, который вводит логику предварительной обработки до того, как запрос достигает IIS-сервера. ASP.NET использует HTTP-модуль для реализации множества собственных функций, таких как аутентификация и авторизация, управление сеансами, кэширование вывода и т. Д.

Движок ASP.NET генерирует множество событий, когда запрос проходит через конвейер запросов. Некоторые из этих событий: AuthenticateRequest, AuthorizeRequest, BeginRequest, EndRequest. Используя HttpModule, вы можете написать логику в этих событиях. Эта логика выполняется при возникновении событий и до того, как запрос достигает IIS.

Создание модулей происходит в два этапа: 1. Реализация интерфейса IHttpModule. 2. Зарегистрируйте модуль в файле web.config или machine.config.

Пример: Безопасность: Используя модуль HTTP, вы можете выполнить пользовательскую аутентификацию или другие проверки безопасности, прежде чем запрос достигнет IIS.


19

HTTP-обработчик - это процесс, который запускается в ответ на запрос к веб-приложению ASP.NET. Модули HTTP позволяют изучать входящие и исходящие запросы и выполнять действия на основе запроса.


1
В этом смысле aspx можно считать типом httphandler?
французский

17
Да, французы .. Откройте код за любой aspx. вы увидите: открытый частичный класс good: System.Web.UI.Page Теперь щелкните правой кнопкой мыши страницу и выберите Перейти к определению, вы увидите: открытый класс Page: TemplateControl, IHttpHandler
Aditya Bokade

5

HttpHandler отвечает за обработку http-запроса по расширению, в то время как HttpModule отвечает на события жизненного цикла приложения.


2

Хорошая статья об этом HttpModule-and-HttpHandlers

Справка: ИНФОРМАЦИЯ: ASP.NET HTTP-модули и обзор HTTP-обработчиков

«Модули вызываются до и после выполнения обработчика. Модули позволяют разработчикам перехватывать, участвовать или изменять каждый отдельный запрос. Обработчики используются для обработки отдельных запросов конечных точек. Обработчики позволяют ASP.NET Framework обрабатывать отдельные URL-адреса HTTP или группы расширений URL-адресов в приложении. В отличие от модулей, для обработки запроса используется только один обработчик ».


Спасибо, это мне очень помогает
Рахул Чоудхури

1

HTTP-обработчик - это то, где фактически выполняется компиляция в зависимости от настроек. например, если расширение страницы равно .aspx, оно будет скомпилировано через system.web.Ui.Pagahandlefactory. как только компиляция будет выполнена по запросу дескриптора HTTP, пойдут через модуль HTTP и IIS.


0

HTTP-обработчик

HTTP-обработчик - это процесс, который запускается в ответ на HTTP-запрос. Поэтому, когда пользователь запрашивает файл, он обрабатывается обработчиком на основе расширения. Таким образом, пользовательские обработчики http создаются, когда вам требуется специальная обработка на основе расширения имени файла. Рассмотрим пример создания RSS для сайта. Итак, создайте обработчик, который генерирует XML-формат в формате RSS. Теперь свяжите расширение .rss с пользовательским обработчиком.

HTTP-модули

Модули HTTP подключаются к жизненному циклу запроса. Поэтому, когда запрос обрабатывается, он проходит через все модули в конвейере запроса. Так что обычно http-модули используются для:

Безопасность: для проверки подлинности запроса до его обработки.

Статистика и ведение журнала. Поскольку модули вызываются для каждого запроса, их можно использовать для сбора статистики и для регистрации информации.

Пользовательский заголовок: поскольку ответ может быть изменен, можно добавить пользовательскую информацию заголовка к ответу.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.