Controlador HTTP vs módulo HTTP

144

¿Alguien puede explicar en menos de 2 oraciones la diferencia entre ambas? Sí, sé que Google puede proporcionar cientos de respuestas, pero no una de cada 2 oraciones claras :)

frenchie
fuente
En el contexto de buscar ejecutar algún código antes de cada solicitud.
frenchie
23
+1 para el "sí, sé que puedo buscarlo en Google".
Csharp
77
"Menos de dos oraciones". ¿Como una oración?
Andrew Theken

Respuestas:

316

HttpHandler es hacia donde se dirige el tren de solicitud. HttpModule es una estación en el camino.

muratgu
fuente
Maravillosa explicación! :)
Usuario SO
3
Estoy de acuerdo con que esta es una buena respuesta, sin embargo, no se puede marcar como respuesta aceptada.
Shrivallabh
Simplemente genial !! :)
Dee
44
Técnicamente, no "menos de dos oraciones". <trollface>
Andrew Theken
55
Agradable. Yo agregaría que HttpContext es el tren. Cada estación (Módulo) contribuye a HttpContext de alguna manera a medida que pasa.
Duanne
203

Las dos oraciones:

Se ejecutará un HttpModule para cada solicitud a su aplicación, independientemente de la extensión, y generalmente se usa para cosas como seguridad, estadísticas, registro, etc.

Un HttpHandler generalmente se asocia con una extensión específica y se usa para cosas como fuentes RSS, generación o modificación de imágenes dinámicas y similares.

Un poco más de explicación si eso no está completamente claro:

A mi modo de ver, los módulos "se conectan" a la canalización de solicitudes, mientras que los controladores "manejan" una extensión de archivo específica. Entonces, si tiene un sitio con un LoggingModule y un PdfHandler, ambos se ejecutarán para una solicitud a http://example.com/sample.pdf , y el módulo de registro solo se ejecutará para una solicitud a http: // ejemplo.com/page.aspx .

Hay un artículo bastante claro sobre la diferencia en MSDN: Descripción general de controladores HTTP y módulos HTTP

Jon Galloway
fuente
1
ok, así que si quiero ejecutar algún código que se ejecuta en cada solicitud a un archivo .aspx, implemento un controlador y si quiero ejecutar algún código en cada solicitud, independientemente del tipo de archivo solicitado, implemento un módulo. ¿Es asi?
frenchie
55
@frenchie: no, las páginas aspx se crean sobre HttpHandlers al proporcionarle el ciclo de vida de la página. Piense en ello como una página aspx, cortada al evento muy básico. ProcessRequest. El módulo, por otro lado, se ejecutará en cualquier punto del ciclo de vida al que lo conecte. Para su escenario de querer ejecutar algo antes de la página aspx, desea un módulo. Sin embargo, debe filtrar manualmente las solicitudes a páginas que no son .aspx
Phill
66
¿Estoy en lo cierto al decir que cada solicitud puede tener solo 1 controlador y varios módulos?
Maarten Kieft
1
Es la respuesta general de handlers = state, y los módulos no son un estándar no escrito o hay algo fundamentalmente diferente de los dos, quiero decir, ¿podría una persona codificar un módulo para que sea como un controlador y viceversa o hay limitaciones para ¿Los que lo hacen imposible?
Rich Bianco
21

El objetivo principal y común de HttpHandler y HttpModule es inyectar la lógica de preprocesamiento antes de que la solicitud ASP.NET llegue al servidor IIS.

ASP.NET proporciona dos formas de inyectar lógica en la canalización de solicitudes;

  1. Http Handlers: Http Handler nos ayuda a inyectar lógica de preprocesamiento basada en la extensión del nombre de archivo solicitado. ASP.NET usa controladores HTTP para implementar muchas de sus propias funcionalidades. Por ejemplo, ASP.NET usa controladores para procesar archivos .aspx, .asmx y trace.axd.

ejemplo: fuentes RSS: para crear una fuente RSS para un sitio web, puede crear un controlador que emita XML con formato RSS. Entonces, cuando los usuarios envían una solicitud a su sitio que termina en .rss, ASP.NET llama a su controlador para procesar la solicitud.

Hay tres pasos involucrados en la creación del controlador 1. Implemente la interfaz IHttpHandler. 2. Registre el controlador en el archivo web.config o machine.config. 3. Asigne la extensión del archivo (* .arshad) a aspnet_isapi.dll en el IIS.

La interfaz IHttpHandler tiene el método ProcessRequest y la propiedad IsReusable que debe implementarse. ProcessRequest: en este método, usted escribe el código que produce la salida para el controlador. IsResuable: esta propiedad indica si este controlador se puede reutilizar o no.

Puede registrar el controlador en el archivo web.config como este

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

Nota: aquí estamos manejando cualquier nombre de archivo con extensión arshad.

  1. Módulos Http: HttpModule es un procesador basado en eventos para inyectar lógica de preprocesamiento antes de que la solicitud llegue al servidor IIS. ASP.NET utiliza el Módulo HTTP para implementar muchas de sus propias funciones, como autenticación y autorización, administración de sesiones y almacenamiento en caché de resultados, etc.

El motor ASP.NET emite muchos eventos a medida que la solicitud pasa a través de la canalización de solicitudes. Algunos de esos eventos son AuthenticateRequest, AuthorizeRequest, BeginRequest, EndRequest. Al usar HttpModule puede escribir lógica en estos eventos. Estas lógicas se ejecutan cuando se desencadenan los eventos y antes de que la solicitud llegue a IIS.

Hay dos pasos involucrados en la creación de módulos: 1. Implementar la interfaz IHttpModule 2. Registrar el módulo en el archivo web.config o machine.config

ejemplo: Seguridad: con el módulo HTTP, puede realizar una autenticación personalizada u otras comprobaciones de seguridad antes de que la solicitud llegue a IIS.

Mohammed Arshad
fuente
19

El controlador HTTP es el proceso que se ejecuta en respuesta a una solicitud realizada a una aplicación web ASP.NET. Los módulos HTTP le permiten examinar las solicitudes entrantes y salientes y tomar medidas en función de la solicitud.

StephenLembert
fuente
1
En ese sentido, un aspx puede considerarse un tipo de httphandler?
frenchie
17
Sí Frenchie ... Abre el código detrás de cualquier aspx. verá: clase parcial pública buena: System.Web.UI.Page Ahora haga clic derecho en Página y haga clic en Ir a definición, verá: clase pública Página: TemplateControl, IHttpHandler
Aditya Bokade
5

HttpHandler es responsable de manejar la solicitud http por extensión mientras HttpModule responde a los eventos del ciclo de vida de la aplicación.

marvelTracker
fuente
2

Buen artículo sobre HttpModule-and-HttpHandlers

Referencia: INFORMACIÓN: Información general sobre módulos HTTP ASP.NET y controladores HTTP

“Los módulos se llaman antes y después de que se ejecute el controlador. Los módulos permiten a los desarrolladores interceptar, participar o modificar cada solicitud individual. Los manejadores se utilizan para procesar solicitudes de puntos finales individuales. Los controladores permiten que ASP.NET Framework procese URL HTTP individuales o grupos de extensiones URL dentro de una aplicación. A diferencia de los módulos, solo se utiliza un controlador para procesar una solicitud ”.

sonriente
fuente
Gracias, me ayuda mucho
Rahul Chowdhury
1

El controlador HTTP es donde realmente se realiza la compilación en función de la configuración. como si la extensión de la página es .aspx, entonces se compilará a través de system.web.Ui.Pagahandlefactory. una vez que se realiza la compilación en la solicitud de identificador HTTP, el módulo HTTP y el IIS irán.

Dadan Tiwari
fuente
0

HTTP Handler

HTTP Handler es el proceso que se ejecuta en respuesta a una solicitud HTTP. Por lo tanto, cada vez que el usuario solicita un archivo, el controlador lo procesa en función de la extensión. Por lo tanto, los manejadores http personalizados se crean cuando necesita un manejo especial basado en la extensión del nombre del archivo. Consideremos un ejemplo para crear RSS para un sitio. Por lo tanto, cree un controlador que genere XML con formato RSS. Ahora enlace la extensión .rss al controlador personalizado.

Módulos HTTP

Los módulos HTTP se conectan al ciclo de vida de una solicitud. Entonces, cuando se procesa una solicitud, se pasa a través de todos los módulos en la tubería de la solicitud. En general, los módulos http se usan para:

Seguridad: para autenticar una solicitud antes de que se maneje la solicitud.

Estadísticas y registro: dado que se solicitan módulos para cada solicitud, se pueden usar para recopilar estadísticas y para registrar información.

Encabezado personalizado: dado que la respuesta se puede modificar, se puede agregar información de encabezado personalizado a la respuesta.

Mohammad niazmand
fuente