Http Modules e Http Handlers

7/09/2011 Leia em 3 minutos

Resolvi escrever este post para explicar o que são os tão conhecidos porém as vezes não entendidos Http Modules e Http Handlers, estes dois players na infraestrutura do ASP.NET fazem basicamente tudo acontecer.

Todo o funcionamento do ASP.NET é baseado nestes dois conceitos que aprenderemos a partir de agora.

ASP.NET Pipeline

Todas as requisições feitas para uma aplicação ASP.NET são tratadas através de um pipeline, este pipeline possui uma série de eventos de entrada que leva a tal requisição a um manipulador, este manipulador é o que chamamos de Http Handler (os Http Handlers também são conhecidos como Endpoints – você já entenderá o porque). Depois da requisição ser tratada por um Http Handler ela será liberada ao solicitante e dessa vez passará pelos eventos de saída do pipeline.

ASP.NET Pipeline

ASP.NET Pipeline

Perceba que na imagem o processo lembra muito um túnel (pipeline) onde a requisição passa por eventos de entrada, é tratada por um http handler e depois passa por eventos de saída até ser liberada ao solicitante da requisição.

É importante lembrar que todas as requisições passam por este eventos do pipeline (definidos por HttpApplication) .

Http Handlers

Os Http Handlers são de fato os componentes que fazem “a coisa acontecer”, são eles que processam as requisições (ProcessRequest definido por IHttpHandler). No Web Forms por exemplo o HttpHandler que processa as requisições é o PageHandlerFactory que implementa a interface IHttpHandler, já no MVC esse papel é feito pelos handlers MvcHandler e MvcHttpHandler (dependendo da situação).

É comum nós termos que criar nossos próprios Http Handlers em algumas situacões como por exemplo um handler de imagens que possui os binários no banco de dados e ainda talvez tenham que variar os tamanhos dessas imagens. Outro exemplo seria criar um handler para prover informações em formato RSS ou CSV.

Implementar um handler não é uma tarefa muito difícil só é preciso implementar a interface IHttpHandler (Basta dar uma googlada para ver 1 bilhão de exemplos =D).

Http Modules

Diferente dos Http Handlers que atuam como endpoints para as requisições os Http Modules atuam nos mais variados eventos do pipeline do ASP.NET, na verdade um Http Module (quando escrito) se inscreve em um ou mais eventos do pipeline onde pode fazer diferentes coisas (olhar imagem do pipeline acima e link do HttpApplication), dessa forma dizemos que os Modules atuam como “filtros” em todo esse processo (tanto nos eventos de entrada como nos eventos de saída do pipeline).

Você pode querer criar um Http Module para por exemplo minimificar arquivos estáticos, colocar alguns headers http customizados na resposta da requisição ou ainda tratar questões de segurança e logging que são tarefas que normalmente um Http Module resolve muito bem.

Assim como os Handlers os Modules não são coisas de outro mundo para serem implementados e você pode achar milhares de exemplos facilmente no Google.

Resumindo

Os Http Handles e os Http Modules são parte fundamental do ASP.NET entendê-los faz de você um melhor desenvolvedor sem dúvidas, e acredite quando der zica saber bem como funciona o framework com o qual você trabalha faz toda a diferença.

Espero que este post tenha ajudado de alguma forma…

Qualquer dúvida, crítica ou sugestão por favor vamos bater um papo nos comentários.

Abraços!


By