HTTP-обробник проти HTTP-модуля


144

Чи може хтось пояснити менш ніж за два речення різницю між обома? Так, я знаю, що Google може дати сотні відповідей, але не один із 2 чітких пропозицій :)


У контексті пошуку запускати деякий код перед кожним запитом.
frenchie

23
+1 для "так, я знаю, я можу це Google".
Csharp

7
"Менше двох речень." Мовляв, одне речення?
Ендрю Текен

Відповіді:


316

HttpHandler - куди направляється поїзд запиту. HttpModule - станція по дорозі.


Чудове пояснення! :)
SO Користувач

3
Я погоджуюсь, що це хороша відповідь, однак не можна позначати її як прийняту відповідь.
Shrivallabh

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

4
Технічно не менше, ніж два речення. <trollface>
Ендрю Текен

5
Приємно. Я додам, що HttpContext - поїзд. Кожна станція (модуль) певним чином вносить свій внесок у HttpContext, коли він проходить повз.
Duanne

203

Два речення:

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

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

Ще трохи пояснення, якщо це не зовсім зрозуміло:

Як я думаю про них - модулі "підключаються" до конвеєра запитів, тоді як обробники "обробляють" конкретне розширення файлу. Отже, якщо у вас є сайт з LoggingModule та PdfHandler, обидва виконують запит на http://example.com/sample.pdf , і лише модуль реєстрації виконає запит на http: // example.com/page.aspx .

Існує досить чітка стаття про різницю в MSDN: обробники HTTP та огляд модулів HTTP


1
Гаразд, тому, якщо я хочу запустити якийсь код, який працює за кожним запитом до. Це все?
frenchie

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

6
Чи правильно я кажу, що кожен запит може мати лише 1 обробник і кілька модулів?
Maarten Kieft

1
Чи є загальна відповідь обробників = стан, і модулі не є неписаним стандартом, чи щось принципово відрізняється від двох, я маю на увазі, чи може людина кодувати модуль, подібний до обробника, і навпаки, чи є обмеження на ті, що роблять неможливим?
Багатий Б'янко

21

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

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

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

приклад: RSS-канали: щоб створити RSS-канал для веб-сайту, ви можете створити обробник, що випромінює формат RSS у форматі RSS. Отже, коли користувачі надсилають запит на ваш сайт, який закінчується .rss, ASP.NET викликає вашого обробника для обробки запиту.

У створенні інтерфейсу Handler 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>

Примітка: тут ми обробляємо будь-яке ім'я файлу з розширенням аршад.

  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
У цьому сенсі аспікс можна вважати типом httphandler?
frenchie

17
Так Frenchie .. Відкрийте код позаду будь-якого aspx. ви побачите: громадський частковий клас хороший: System.Web.UI.Page Тепер клацніть правою кнопкою миші на сторінці та натисніть Перейти до визначення, ви побачите: сторінка публічного класу: TemplateControl, IHttpHandler
Aditya Bokade

5

HttpHandler відповідає за розширення запиту http, тоді як HttpModule відповідає на події життєвого циклу програми.


2

Хороша стаття про це HttpModule-and-HttpHandlers

Довідка: INFO: Огляд модулів HTTP ASP.NET та обробників HTTP

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


Дякую, мені це дуже допомагає
Рахул Чоуддурі

1

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


0

Обробник HTTP

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

Модулі HTTP

Модулі HTTP підключаються до життєвого циклу запиту. Отже, коли запит обробляється, він передається через усі модулі в конвеєрі запиту. Тому в основному модулі http використовуються для:

Безпека: для автентифікації запиту до обробки запиту.

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

Спеціальний заголовок: Оскільки відповідь можна змінити, до відповіді можна додати інформацію власної заголовки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.