Gestore HTTP vs modulo HTTP


144

Qualcuno può spiegare in meno di 2 frasi la differenza tra entrambi? Sì, so che Google può fornire centinaia di risposte ma non una frase chiara su 2 :)


Nel contesto di cercare di eseguire del codice prima di ogni richiesta.
frenchie,

23
+1 per "sì, lo so che posso farlo su Google".
Csharp,

7
"Meno di due frasi." Come una frase?
Andrew Theken,

Risposte:


316

HttpHandler è la destinazione del treno di richiesta. HttpModule è una stazione lungo la strada.


Spiegazione meravigliosa! :)
Utente SO

3
Sono d'accordo che questa è una buona risposta, tuttavia non può essere contrassegnata come risposta accettata.
Shrivallabh,

Semplicemente geniale !! :)
Dee,

4
Tecnicamente, non "meno di due frasi". <trollface>
Andrew Theken il

5
Bello. Vorrei aggiungere che HttpContext è il treno. Ogni stazione (modulo) contribuisce a HttpContext in qualche modo mentre passa.
Duanne,

203

Le due frasi:

Un HttpModule verrà eseguito per ogni richiesta alla tua applicazione, indipendentemente dall'estensione, e viene generalmente utilizzato per cose come sicurezza, statistiche, registrazione, ecc.

Un HttpHandler è generalmente associato a un'estensione specifica e viene utilizzato per cose come feed RSS, generazione o modifica dinamica di immagini e simili.

Qualche spiegazione in più se non è del tutto chiaro:

Il modo in cui ci penso: i moduli "si collegano" alla pipeline della richiesta, mentre i gestori "gestiscono" un'estensione di file specifica. Quindi, se hai un sito con un LoggingModule e un PdfHandler, entrambi verranno eseguiti per una richiesta a http://example.com/sample.pdf e il modulo di registrazione da solo verrà eseguito per una richiesta a http: // esempio.com/pagina.aspx .

C'è un articolo abbastanza chiaro sulla differenza tra MSDN: gestori HTTP e panoramica dei moduli HTTP


1
ok, quindi se voglio eseguire un codice che viene eseguito su ogni richiesta in un file .aspx implemento un gestore e se voglio eseguire un codice su ogni richiesta indipendentemente dal tipo di file richiesto, implemento un modulo. È così?
frenchie,

5
@frenchie - No, le pagine aspx sono costruite su HttpHandlers fornendo il ciclo di vita della pagina. Pensala come una pagina aspx, ridotta all'evento di base. ProcessRequest. D'altro canto, il modulo verrà eseguito in qualsiasi punto del ciclo di vita a cui lo si collega. Per il tuo scenario di voler eseguire qualcosa prima della pagina aspx, vuoi un modulo. Tuttavia, è necessario filtrare manualmente le richieste su pagine che non sono .aspx
Phill

6
Ho ragione dicendo che ogni richiesta può avere solo 1 gestore e più moduli?
Maarten Kieft,

1
È la risposta generale di handlers = state, e i moduli non hanno uno standard non scritto o c'è qualcosa di fondamentalmente diverso dai due, voglio dire, una persona può codificare un modulo per essere come un handler e viceversa o ci sono limitazioni a quelli che lo rendono impossibile?
Rich Bianco,

21

L'obiettivo principale e comune di HttpHandler e HttpModule è quello di iniettare la logica di pre-elaborazione prima che la richiesta ASP.NET raggiunga il server IIS.

ASP.NET fornisce due modi per iniettare la logica nella pipeline della richiesta;

  1. Http Handlers: Http Handler ci aiuta a iniettare la logica di pre-elaborazione in base all'estensione del nome del file richiesto. ASP.NET utilizza i gestori HTTP per implementare molte delle proprie funzionalità. Ad esempio, ASP.NET utilizza i gestori per l'elaborazione dei file .aspx, .asmx e trace.axd.

esempio: feed RSS: per creare un feed RSS per un sito Web, è possibile creare un gestore che emetta XML in formato RSS. Pertanto, quando gli utenti inviano una richiesta al tuo sito che termina con .rss, ASP.NET chiama il gestore per elaborare la richiesta.

La creazione del gestore 1. prevede tre passaggi. Implementare l'interfaccia IHttpHandler. 2. Registrare il gestore nel file web.config o machine.config. 3. Mappare l'estensione del file (* .arshad) su aspnet_isapi.dll in IIS.

L'interfaccia IHttpHandler ha il metodo ProcessRequest e la proprietà IsReusable che devono essere implementati. ProcessRequest: in questo metodo, si scrive il codice che produce l'output per il gestore. IsResuable: questa proprietà indica se questo gestore può essere riutilizzato o meno.

È possibile registrare il gestore nel file web.config in questo modo

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

Nota: qui stiamo gestendo qualsiasi nome di file con estensione arshad.

  1. Moduli Http: HttpModule è un processore basato su eventi per iniettare la logica di pre-elaborazione prima che la richiesta raggiunga il server IIS. ASP.NET utilizza il modulo HTTP per implementare molte delle proprie funzionalità come l'autenticazione e l'autorizzazione, la gestione delle sessioni e la cache di output ecc.

Il motore ASP.NET emette molti eventi quando passa la richiesta attraverso la pipeline della richiesta. Alcuni di questi eventi sono AuthenticateRequest, AuthorizeRequest, BeginRequest, EndRequest. Utilizzando HttpModule è possibile scrivere la logica in questi eventi. Questa logica viene eseguita quando si verificano gli eventi e prima che la richiesta raggiunga IIS.

La creazione dei moduli prevede due passaggi: 1. Implementazione dell'interfaccia IHttpModule 2. Registrazione del modulo nel file web.config o machine.config

esempio: Sicurezza: utilizzando il modulo HTTP, è possibile eseguire l'autenticazione personalizzata o altri controlli di sicurezza prima che la richiesta raggiunga IIS.


19

Il gestore HTTP è il processo che viene eseguito in risposta a una richiesta fatta a un'applicazione Web ASP.NET. I moduli HTTP consentono di esaminare le richieste in entrata e in uscita e di agire in base alla richiesta.


1
In tal senso, un aspx può essere considerato un tipo di httphandler?
frenchie,

17
Sì, francese ... Apri il codice dietro a qualsiasi aspx. vedrai: public public class good: System.Web.UI.Page Ora fai clic destro sulla pagina e fai clic su Vai alla definizione, vedrai: public class Pagina: TemplateControl, IHttpHandler
Aditya Bokade

5

HttpHandler è responsabile della gestione della richiesta http per estensione mentre HttpModule risponde agli eventi del ciclo di vita dell'applicazione.


2

Bell'articolo a riguardo HttpModule-and-HttpHandlers

Riferimento: INFO: panoramica dei moduli HTTP e dei gestori HTTP ASP.NET

“I moduli vengono chiamati prima e dopo l'esecuzione del gestore. I moduli consentono agli sviluppatori di intercettare, partecipare o modificare ogni singola richiesta. I gestori vengono utilizzati per elaborare le richieste di singoli endpoint. I gestori consentono a ASP.NET Framework di elaborare singoli URL HTTP o gruppi di estensioni URL all'interno di un'applicazione. A differenza dei moduli, per elaborare una richiesta viene utilizzato un solo gestore ”.


Grazie, mi aiuta molto
Rahul Chowdhury il

1

Il gestore HTTP è il luogo in cui la compilazione viene effettivamente eseguita in base all'impostazione. ad esempio se l'estensione della pagina è .aspx, verrà compilata tramite system.web.Ui.Pagahandlefactory. una volta effettuata la compilazione su richiesta handle HTTP andrà attraverso il modulo HTTP e IIS.


0

Gestore HTTP

Il gestore HTTP è il processo che viene eseguito in risposta a una richiesta HTTP. Pertanto, ogni volta che l'utente richiede un file, questo viene elaborato dal gestore in base all'estensione. Pertanto, i gestori http personalizzati vengono creati quando è necessario un trattamento speciale basato sull'estensione del nome file. Consideriamo un esempio per creare RSS per un sito. Quindi, crea un gestore che generi XML in formato RSS. Ora associa l'estensione .rss al gestore personalizzato.

Moduli HTTP

I moduli HTTP sono collegati al ciclo di vita di una richiesta. Pertanto, quando una richiesta viene elaborata, viene passata attraverso tutti i moduli nella pipeline della richiesta. Quindi in genere i moduli http vengono utilizzati per:

Sicurezza: per autenticare una richiesta prima che la richiesta venga gestita.

Statistiche e registrazione: poiché i moduli sono chiamati per ogni richiesta, possono essere utilizzati per la raccolta di statistiche e per la registrazione delle informazioni.

Intestazione personalizzata: poiché la risposta può essere modificata, è possibile aggiungere informazioni di intestazione personalizzate alla risposta.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.