Moduł obsługi HTTP a moduł HTTP

144

Czy ktoś może wyjaśnić w mniej niż 2 zdaniach różnicę między nimi? Tak, wiem, że Google może udzielić setek odpowiedzi, ale ani jednego na dwa jasne zdania :)

Francuz
źródło
W kontekście szukania uruchomienia kodu przed każdym żądaniem.
Frenchie
23
+1 za „tak, wiem, że mogę to wygooglować”.
Csharp
7
„Mniej niż dwa zdania”. Na przykład jedno zdanie?
Andrew Theken

Odpowiedzi:

316

HttpHandler to miejsce, do którego zmierza pociąg żądań. HttpModule to stacja po drodze.

muratgu
źródło
Cudowne wyjaśnienie! :)
Użytkownik SO
3
Zgadzam się, że to dobra odpowiedź, ale nie można jej oznaczyć jako zaakceptowanej.
Shrivallabh
Po prostu genialny !! :)
Dee
4
Technicznie nie mniej niż dwa zdania. <trollface>
Andrew Theken
5
Miły. Dodam, że HttpContext to pociąg. Każda stacja (moduł) w jakiś sposób przyczynia się do HttpContext, gdy przechodzi.
Duanne
203

Dwa zdania:

HttpModule będzie wykonywany dla każdego żądania skierowanego do Twojej aplikacji, niezależnie od rozszerzenia, i jest zwykle używany do takich celów, jak bezpieczeństwo, statystyki, logowanie itp.

HttpHandler jest zwykle powiązany z określonym rozszerzeniem i jest używany do takich rzeczy, jak kanały RSS, dynamiczne generowanie lub modyfikowanie obrazów i tym podobne.

Trochę więcej wyjaśnień, jeśli nie jest to do końca jasne:

Ja o nich myślę - moduły „podłączają się” do potoku żądań, podczas gdy handlery „obsługują” określone rozszerzenie pliku. Tak więc, jeśli masz witrynę z LoggingModule i PdfHandler, obie będą wykonywane dla żądania do http://example.com/sample.pdf , a sam moduł logowania wykona żądanie do http: // example.com/page.aspx .

Jest całkiem jasny artykuł na temat różnicy w MSDN: Przegląd modułów obsługi HTTP i modułów HTTP

Jon Galloway
źródło
1
ok, więc jeśli chcę uruchomić jakiś kod, który działa na każde żądanie do pliku .aspx, implementuję procedurę obsługi i jeśli chcę uruchamiać kod na każdym żądaniu, niezależnie od typu żądanego pliku, implementuję moduł. Czy to to?
Frenchie
5
@frenchie - nie, strony aspx są tworzone na podstawie HttpHandlers, zapewniając cykl życia strony. Pomyśl o tym jak o stronie aspx, ograniczonej do bardzo podstawowego zdarzenia. ProcessRequest. Z drugiej strony moduł będzie wykonywany w dowolnym momencie cyklu życia, do którego zostanie podłączony. W scenariuszu, w którym chcesz uruchomić coś przed stroną aspx, potrzebujesz modułu. Musisz jednak ręcznie odfiltrować żądania do stron, które nie są w formacie .aspx
Phill,
6
Czy mam rację, mówiąc, że każde żądanie może mieć tylko 1 program obsługi i wiele modułów?
Maarten Kieft
1
Czy ogólna odpowiedź to handlers = stan, a moduły nie są niepisanym standardem, czy też jest coś zasadniczo różniącego się od tych dwóch, mam na myśli, czy osoba może zakodować moduł tak, aby był jak handler i odwrotnie, czy też istnieją ograniczenia które to uniemożliwiają?
Rich Bianco,
21

Głównym i wspólnym celem HttpHandler i HttpModule jest wstrzyknięcie logiki wstępnego przetwarzania, zanim żądanie ASP.NET dotrze do serwera IIS.

ASP.NET zapewnia dwa sposoby wstrzykiwania logiki w potoku żądań;

  1. Http Handler: Http Handler pomaga nam wstrzyknąć logikę przetwarzania wstępnego w oparciu o rozszerzenie żądanej nazwy pliku. ASP.NET używa procedur obsługi HTTP do implementacji wielu własnych funkcji, na przykład ASP.NET używa procedur obsługi do przetwarzania plików .aspx, .asmx i trace.axd.

przykład: kanały RSS: aby utworzyć kanał RSS dla witryny sieci Web, możesz utworzyć moduł obsługi, który emituje XML w formacie RSS. Dlatego gdy użytkownicy wysyłają żądanie do witryny, które kończy się na .rss, ASP.NET wywołuje program obsługi w celu przetworzenia żądania.

Istnieją trzy kroki związane z tworzeniem programu obsługi 1. Zaimplementuj interfejs IHttpHandler. 2. Zarejestruj program obsługi w pliku web.config lub machine.config. 3. Zamapuj rozszerzenie pliku (* .arshad) na aspnet_isapi.dll w usługach IIS.

Interfejs IHttpHandler ma metodę ProcessRequest i właściwość IsReusable, które należy zaimplementować. ProcessRequest: w tej metodzie piszesz kod, który generuje dane wyjściowe dla procedury obsługi. IsResuable: ta właściwość określa, czy ten program obsługi może być ponownie użyty, czy nie.

Możesz zarejestrować moduł obsługi w pliku web.config w ten sposób

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

Uwaga: tutaj obsługujemy dowolną nazwę pliku z rozszerzeniem arshad.

  1. Moduły HTTP: HttpModule to procesor oparty na zdarzeniach, który wstrzykuje logikę przetwarzania wstępnego, zanim żądanie dotrze do serwera IIS. ASP.NET używa modułu HTTP do implementacji wielu własnych funkcji, takich jak uwierzytelnianie i autoryzacja, zarządzanie sesjami i buforowanie danych wyjściowych itp.

Aparat ASP.NET emituje wiele zdarzeń, gdy żądanie przechodzi przez potok żądania. Niektóre z tych zdarzeń to AuthenticateRequest, AuthorizeRequest, BeginRequest, EndRequest. Używając HttpModule, możesz napisać logikę w tych zdarzeniach. Te logiki są wykonywane, gdy zdarzenia są uruchamiane i zanim żądanie dotrze do usług IIS.

Tworzenie modułów obejmuje dwa etapy: 1. Zaimplementuj interfejs IHttpModule 2. Zarejestruj moduł w pliku web.config lub machine.config

przykład: Bezpieczeństwo: Za pomocą modułu HTTP można przeprowadzić niestandardowe uwierzytelnianie lub inne kontrole bezpieczeństwa, zanim żądanie dotrze do IIS.

Mohammed Arshad
źródło
19

Procedura obsługi HTTP to proces, który jest uruchamiany w odpowiedzi na żądanie wysłane do aplikacji sieci Web ASP.NET. Moduły HTTP umożliwiają badanie przychodzących i wychodzących żądań oraz podejmowanie działań na ich podstawie.

StephenLembert
źródło
1
W tym sensie aspx można uznać za typ httphandler?
Frenchie
17
Tak, Frenchie .. Otwórz kod związany z dowolnym aspx. zobaczysz: publiczną klasę częściową dobry: System.Web.UI.Page Teraz kliknij prawym przyciskiem myszy stronę i kliknij Przejdź do definicji, zobaczysz: klasa publiczna Strona: TemplateControl, IHttpHandler
Aditya Bokade
5

HttpHandler jest odpowiedzialny za obsługę żądań http przez rozszerzenie, podczas gdy HttpModule odpowiada na zdarzenia cyklu życia aplikacji.

marvelTracker
źródło
2

Ładny artykuł o tym HttpModule-and-HttpHandlers

Odniesienie: INFO: Omówienie modułów HTTP ASP.NET i programów obsługi HTTP

„Moduły są wywoływane przed i po wykonaniu procedury obsługi. Moduły umożliwiają programistom przechwytywanie, uczestniczenie lub modyfikowanie każdego pojedynczego żądania. Programy obsługi służą do przetwarzania indywidualnych żądań punktów końcowych. Programy obsługi umożliwiają platformie ASP.NET Framework przetwarzanie pojedynczych adresów URL HTTP lub grup rozszerzeń adresów URL w aplikacji. W przeciwieństwie do modułów, tylko jeden program obsługi jest używany do przetwarzania żądania ”.

smily
źródło
Dziękuję, bardzo mi to pomaga
Rahul Chowdhury
1

Obsługa HTTP to miejsce, w którym faktycznie kompilacja jest wykonywana na podstawie ustawień. na przykład jeśli rozszerzenie strony to .aspx, zostanie skompilowane za pośrednictwem system.web.Ui.Pagahandlefactory. po zakończeniu kompilacji żądanie uchwytu HTTP przejdzie przez moduł HTTP i IIS.

Dadan Tiwari
źródło
0

Obsługa HTTP

Procedura obsługi HTTP to proces uruchamiany w odpowiedzi na żądanie HTTP. Więc gdy użytkownik zażąda pliku, jest on przetwarzany przez program obsługi na podstawie rozszerzenia. Tak więc niestandardowe programy obsługi protokołu HTTP są tworzone, gdy potrzebujesz specjalnej obsługi w oparciu o rozszerzenie nazwy pliku. Rozważmy przykład tworzenia RSS dla witryny. Stwórz więc procedurę obsługi, która generuje XML w formacie RSS. Teraz powiąż rozszerzenie .rss z niestandardową obsługą.

Moduły HTTP

Moduły HTTP są dołączane do cyklu życia żądania. Więc kiedy żądanie jest przetwarzane, jest przekazywane przez wszystkie moduły w potoku żądania. Więc generalnie moduły http są używane do:

Bezpieczeństwo: do uwierzytelniania żądania przed jego obsługą.

Statystyki i rejestrowanie: Ponieważ moduły są wywoływane dla każdego żądania, mogą być używane do gromadzenia statystyk i rejestrowania informacji.

Niestandardowy nagłówek: ponieważ odpowiedź można modyfikować, można dodać do niej informacje z niestandardowego nagłówka.

Mohammad niazmand
źródło