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 :)


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.


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


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.


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.


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.


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 ”.


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.


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.