Manipulador HTTP vs módulo HTTP

144

Alguém pode explicar em menos de 2 frases a diferença entre ambos? Sim, eu sei que o Google pode fornecer centenas de respostas, mas nenhuma em duas frases claras :)

frenchie
fonte
No contexto de procurar executar algum código antes de cada solicitação.
frenchie
23
+1 para o "sim, eu sei que posso pesquisar no Google".
precisa saber é o seguinte
7
"Menos de duas frases." Tipo, uma frase?
Andrew Theken 4/12/15

Respostas:

316

HttpHandler é o destino do trem de solicitação. HttpModule é uma estação ao longo do caminho.

muratgu
fonte
Explicação maravilhosa! :)
Usuário SO
3
Concordo que esta é uma boa resposta, no entanto, não pode ser marcada como resposta aceita.
Shrivallabh
Simplesmente brilhante !! :)
Dee
4
Tecnicamente, não "menos de duas frases". <trollface>
Andrew Theken 4/12/15
5
Agradável. Eu acrescentaria que o HttpContext é o trem. Cada estação (Módulo) contribui para o HttpContext de alguma forma à medida que passa.
Duanne
203

As duas frases:

Um HttpModule será executado para todas as solicitações do seu aplicativo, independentemente da extensão, e geralmente é usado para itens como segurança, estatísticas, registro etc.

Um HttpHandler geralmente é associado a uma extensão específica e é usado para itens como feeds RSS, geração ou modificação dinâmica de imagens e similares.

Um pouco mais de explicação, se isso não estiver totalmente claro:

A maneira como penso sobre eles - os módulos "se conectam" ao pipeline de solicitação, enquanto os manipuladores "manipulam" uma extensão de arquivo específica. Portanto, se você possui um site com um LoggingModule e um PdfHandler, ambos executam uma solicitação para http://example.com/sample.pdf , e o módulo de log sozinho executa uma solicitação para http: // example.com/page.aspx .

Há um artigo bastante claro sobre a diferença no MSDN: Visão geral sobre manipuladores HTTP e módulos HTTP

Jon Galloway
fonte
1
ok, então, se eu quiser executar algum código executado em todas as solicitações em um arquivo .aspx, implementei um manipulador e se desejar executar algum código em todas as solicitações, independentemente do tipo de arquivo solicitado, implementei um módulo. É isso?
frenchie
5
@frenchie - Não, as páginas aspx são criadas sobre o HttpHandlers, fornecendo o ciclo de vida da página. Pense nisso como uma página aspx, resumida ao evento muito básico. ProcessRequest. O módulo, por outro lado, será executado em qualquer ponto do ciclo de vida em que você o conectar. Para o seu cenário de querer executar algo anterior à página aspx, você deseja um módulo. No entanto você precisa para filtrar manualmente os pedidos de páginas que não são aspx
Phill
6
Estou correto dizendo que toda solicitação pode ter apenas 1 manipulador e vários módulos?
Maarten Kieft
1
A resposta geral é de manipuladores = state e os módulos não são um padrão não-escrito ou há algo fundamentalmente diferente dos dois, quero dizer, alguém poderia codificar um módulo para ser como um manipulador e vice-versa ou existem limitações para aqueles que tornam isso impossível?
Rich Bianco
21

O objetivo principal e comum do HttpHandler e HttpModule é injetar lógica de pré-processamento antes que a solicitação do ASP.NET atinja o servidor IIS.

O ASP.NET fornece duas maneiras de injetar lógica no pipeline de solicitação;

  1. Manipuladores Http: O Manipulador Http nos ajuda a injetar lógica de pré-processamento com base na extensão do nome do arquivo solicitado. O ASP.NET usa manipuladores HTTP para implementar muitas de suas próprias funcionalidades. Por exemplo, o ASP.NET usa manipuladores para processar arquivos .aspx, .asmx e trace.axd.

exemplo: feeds RSS: para criar um feed RSS para um site, você pode criar um manipulador que emita XML no formato RSS. Portanto, quando os usuários enviam uma solicitação ao seu site que termina em .rss, o ASP.NET chama seu manipulador para processar a solicitação.

Há três etapas envolvidas na criação do manipulador 1. Implemente a interface IHttpHandler. 2. Registre o manipulador no arquivo web.config ou machine.config. 3. Mapeie a extensão do arquivo (* .arshad) para aspnet_isapi.dll no IIS.

A interface IHttpHandler possui o método ProcessRequest e a propriedade IsReusable que precisam ser implementadas. ProcessRequest: neste método, você escreve o código que produz a saída para o manipulador. IsResuable: Esta propriedade informa se esse manipulador pode ser reutilizado ou não.

Você pode registrar o manipulador no arquivo web.config assim

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

Nota: aqui estamos lidando com qualquer nome de arquivo com a extensão arshad.

  1. Módulos Http: HttpModule é um processador baseado em eventos para injetar lógica de pré-processamento antes que a solicitação chegue ao servidor IIS. O ASP.NET usa o Módulo HTTP para implementar muitas de suas próprias funcionalidades, como autenticação e autorização, gerenciamento de sessões e cache de saída, etc.

O mecanismo do ASP.NET emite muitos eventos à medida que a solicitação passa pelo pipeline de solicitação. Alguns desses eventos são AuthenticateRequest, AuthorizeRequest, BeginRequest, EndRequest. Usando o HttpModule, você pode escrever lógica nesses eventos. Essa lógica é executada quando os eventos são disparados e antes que a solicitação chegue ao IIS.

Há duas etapas envolvidas na criação dos módulos: 1. Implementar a interface IHttpModule 2. Registrar o módulo no arquivo web.config ou machine.config

exemplo: Segurança: usando o módulo HTTP, você pode executar autenticação personalizada ou outras verificações de segurança antes que a solicitação chegue ao IIS.

Mohammed Arshad
fonte
19

O manipulador de HTTP é o processo executado em resposta a uma solicitação feita a um aplicativo Web do ASP.NET. Os módulos HTTP permitem examinar solicitações de entrada e saída e executar ações com base na solicitação.

StephenLembert
fonte
1
Nesse sentido, um aspx pode ser considerado um tipo de manipulador de http?
frenchie
17
Sim Frenchie .. Abra o código por trás de qualquer aspx. você vai ver: public class bem parcial: System.Web.UI.Page Agora clique direito na página e clique em Ir para definição, você vai ver: public class Página: TemplateControl, IHttpHandler
Aditya Bokade
5

O HttpHandler é responsável por manipular a solicitação http por extensão enquanto o HttpModule está respondendo aos eventos do ciclo de vida do aplicativo.

marvelTracker
fonte
2

Bom artigo sobre ele HttpModule-and-HttpHandlers

Referência: INFO: Visão Geral sobre Módulos HTTP e Manipuladores HTTP do ASP.NET

“Os módulos são chamados antes e depois da execução do manipulador. Os módulos permitem que os desenvolvedores interceptem, participem ou modifiquem cada solicitação individual. Manipuladores são usados ​​para processar solicitações individuais de terminal. Os manipuladores permitem que o ASP.NET Framework processe URLs HTTP individuais ou grupos de extensões de URL em um aplicativo. Ao contrário dos módulos, apenas um manipulador é usado para processar uma solicitação ”.

smily
fonte
Obrigado, Ele me ajuda muito
Rahul Chowdhury
1

O manipulador HTTP é o local em que a compilação é feita com base na configuração. como se a extensão da página fosse .aspx, ela será compilada através de system.web.Ui.Pagahandlefactory. depois que a compilação for feita na solicitação de identificador HTTP, o módulo HTTP e o IIS serão enviados.

Dadan Tiwari
fonte
0

Manipulador HTTP

Manipulador HTTP é o processo executado em resposta a uma solicitação HTTP. Portanto, sempre que o usuário solicita um arquivo, ele é processado pelo manipulador com base na extensão. Portanto, os manipuladores http personalizados são criados quando você precisa de um tratamento especial com base na extensão do nome do arquivo. Vamos considerar um exemplo para criar RSS para um site. Portanto, crie um manipulador que gere XML formatado em RSS. Agora vincule a extensão .rss ao manipulador personalizado.

Módulos HTTP

Módulos HTTP são conectados ao ciclo de vida de uma solicitação. Portanto, quando uma solicitação é processada, ela é passada por todos os módulos no pipeline da solicitação. Portanto, geralmente os módulos http são usados ​​para:

Segurança: Para autenticar uma solicitação antes que ela seja tratada.

Estatísticas e registro em log: como os módulos são chamados para cada solicitação, eles podem ser usados ​​para coletar estatísticas e para registrar informações.

Cabeçalho personalizado: como a resposta pode ser modificada, é possível adicionar informações de cabeçalho personalizadas à resposta.

Mohammad niazmand
fonte