Gestionnaire HTTP vs module HTTP

144

Quelqu'un peut-il expliquer en moins de 2 phrases la différence entre les deux? Oui, je sais que Google peut fournir des centaines de réponses mais pas une en 2 phrases claires :)

frenchie
la source
Dans le contexte de la recherche d'exécuter du code avant chaque demande.
frenchie
23
+1 pour le "ouais, je sais que je peux le rechercher sur Google".
Csharp
7
"Moins de deux phrases." Comme, une phrase?
Andrew Theken

Réponses:

316

HttpHandler est l'endroit où le train de demandes se dirige. HttpModule est une station en cours de route.

muratgu
la source
Merveilleuse explication! :)
Utilisateur SO
3
Je suis d'accord que c'est une bonne réponse mais ne peut pas être marquée comme réponse acceptée.
Shrivallabh
Tout simplement génial !! :)
Dee
4
Techniquement, pas "moins de deux phrases". <trollface>
Andrew Theken
5
Agréable. J'ajouterais que HttpContext est le train. Chaque station (module) contribue d'une manière ou d'une autre à HttpContext lors de son passage.
Duanne
203

Les deux phrases:

Un HttpModule s'exécutera pour chaque requête adressée à votre application, quelle que soit l'extension, et est généralement utilisé pour des choses comme la sécurité, les statistiques, la journalisation, etc.

Un HttpHandler est généralement associé à une extension spécifique, et est utilisé pour des choses comme les flux RSS, la génération ou la modification d'image dynamique, etc.

Un peu plus d'explication si ce n'est pas tout à fait clair:

La façon dont je pense à eux - les modules "se connectent" au pipeline de requêtes, tandis que les gestionnaires "gèrent" une extension de fichier spécifique. Donc, si vous avez un site avec un LoggingModule et un PdfHandler, les deux s'exécuteront pour une requête à http://example.com/sample.pdf , et le module de journalisation seul s'exécutera pour une requête à http: // example.com/page.aspx .

Il existe un article assez clair sur la différence sur MSDN: Présentation des gestionnaires HTTP et des modules HTTP

Jon Galloway
la source
1
ok, donc si je veux exécuter du code qui s'exécute à chaque demande dans un fichier .aspx, j'implémente un gestionnaire et si je veux exécuter du code à chaque demande quel que soit le type de fichier demandé, j'implémente un module. Est-ce que c'est ça?
frenchie
5
@frenchie - Non, les pages aspx sont construites au-dessus de HttpHandlers en vous fournissant le cycle de vie de la page. Considérez-le comme une page aspx, réduite à l'événement très basique. ProcessRequest. Le module, d'autre part, s'exécutera à tout moment du cycle de vie auquel vous le câblez. Pour votre scénario de vouloir exécuter quelque chose avant la page aspx, vous voulez un module. Cependant, vous devez filtrer manuellement les demandes vers les pages qui ne sont pas .aspx
Phill
6
Ai-je raison de dire que chaque requête ne peut avoir qu'un seul gestionnaire et plusieurs modules?
Maarten Kieft
1
Est-ce que la réponse générale de handlers = state, et les modules ne sont pas une norme non écrite ou y a-t-il quelque chose de fondamentalement différent des deux, je veux dire, une personne pourrait-elle coder un module pour être comme un gestionnaire et vice-versa ou y a-t-il des limitations à ceux qui rendent cela impossible?
Rich Bianco
21

L'objectif principal et commun de HttpHandler et HttpModule est d'injecter une logique de prétraitement avant que la demande ASP.NET n'atteigne le serveur IIS.

ASP.NET fournit deux façons d'injecter de la logique dans le pipeline de requêtes;

  1. Http Handler: Http Handler nous aide à injecter une logique de prétraitement basée sur l'extension du nom de fichier demandé. ASP.NET utilise des gestionnaires HTTP pour implémenter une grande partie de ses propres fonctionnalités. Par exemple, ASP.NET utilise des gestionnaires pour traiter les fichiers .aspx, .asmx et trace.axd.

exemple: Flux RSS: pour créer un flux RSS pour un site Web, vous pouvez créer un gestionnaire qui émet du XML au format RSS. Ainsi, lorsque les utilisateurs envoient une demande à votre site qui se termine par .rss, ASP.NET appelle votre gestionnaire pour traiter la demande.

Il y a trois étapes impliquées dans la création de Handler 1. Implémentez l'interface IHttpHandler. 2. Enregistrez le gestionnaire dans le fichier web.config ou machine.config. 3. Mappez l'extension de fichier (* .arshad) à aspnet_isapi.dll dans IIS.

L'interface IHttpHandler a la méthode ProcessRequest et la propriété IsReusable qui doivent être implémentées. ProcessRequest: dans cette méthode, vous écrivez le code qui produit la sortie pour le gestionnaire. IsResuable: cette propriété indique si ce gestionnaire peut être réutilisé ou non.

Vous pouvez enregistrer le gestionnaire dans le fichier web.config comme ceci

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

Remarque: ici, nous traitons tout nom de fichier avec l'extension arshad.

  1. Modules Http: HttpModule est un processeur basé sur des événements pour injecter une logique de prétraitement avant que la demande n'atteigne le serveur IIS. ASP.NET utilise le module HTTP pour implémenter de nombreuses fonctionnalités telles que l'authentification et l'autorisation, la gestion de session et la mise en cache de sortie, etc.

Le moteur ASP.NET émet de nombreux événements lorsque la demande passe par le pipeline de demandes. Certains de ces événements sont AuthenticateRequest, AuthorizeRequest, BeginRequest, EndRequest. En utilisant HttpModule, vous pouvez écrire la logique dans ces événements. Ces logiques sont exécutées lorsque les événements se déclenchent et avant que la demande n'atteigne IIS.

La création de modules comporte deux étapes: 1. Implémentation de l'interface IHttpModule 2. Enregistrement du module dans le fichier web.config ou machine.config

exemple: Sécurité: à l'aide du module HTTP, vous pouvez effectuer une authentification personnalisée ou d'autres contrôles de sécurité avant que la demande n'atteigne IIS.

Mohammed Arshad
la source
19

Le gestionnaire HTTP est le processus qui s'exécute en réponse à une demande adressée à une application Web ASP.NET. Les modules HTTP vous permettent d'examiner les demandes entrantes et sortantes et d'agir en fonction de la demande.

StephenLembert
la source
1
En ce sens, un aspx peut être considéré comme un type de httphandler?
frenchie
17
Oui Frenchie..Ouvrez le code derrière n'importe quel aspx. vous verrez: classe publique partielle bonne: System.Web.UI.Page Cliquez maintenant avec le bouton droit de la souris sur Page et cliquez sur Aller à la définition, vous verrez: classe publique Page: TemplateControl, IHttpHandler
Aditya Bokade
5

HttpHandler est responsable de la gestion des requêtes http par extension pendant que HttpModule répond aux événements du cycle de vie de l'application.

marvelTracker
la source
2

Bel article à propos de ce HttpModule-and-HttpHandlers

Référence: INFO: Présentation des modules HTTP et des gestionnaires HTTP ASP.NET

«Les modules sont appelés avant et après l'exécution du gestionnaire. Les modules permettent aux développeurs d'intercepter, de participer ou de modifier chaque demande individuelle. Les gestionnaires sont utilisés pour traiter les demandes de point de terminaison individuelles. Les gestionnaires permettent à ASP.NET Framework de traiter des URL HTTP individuelles ou des groupes d'extensions d'URL dans une application. Contrairement aux modules, un seul gestionnaire est utilisé pour traiter une requête ».

souriant
la source
Merci, cela m'aide beaucoup
Rahul Chowdhury
1

Le gestionnaire HTTP est l'endroit où la compilation est effectuée en fonction des paramètres. comme si l'extension de page est .aspx, il sera compilé via system.web.Ui.Pagahandlefactory. une fois la compilation effectuée, la demande de descripteur HTTP passera par le module HTTP et IIS.

Dadan Tiwari
la source
0

Gestionnaire HTTP

HTTP Handler est le processus qui s'exécute en réponse à une requête HTTP. Ainsi, chaque fois que l'utilisateur demande un fichier, il est traité par le gestionnaire en fonction de l'extension. Ainsi, des gestionnaires http personnalisés sont créés lorsque vous avez besoin d'une gestion spéciale basée sur l'extension de nom de fichier. Prenons un exemple pour créer du RSS pour un site. Alors, créez un gestionnaire qui génère du XML au format RSS. Liez maintenant l'extension .rss au gestionnaire personnalisé.

Modules HTTP

Les modules HTTP sont connectés au cycle de vie d'une requête. Ainsi, lorsqu'une demande est traitée, elle passe par tous les modules du pipeline de la demande. Les modules http sont donc généralement utilisés pour:

Sécurité: pour authentifier une demande avant qu'elle ne soit traitée.

Statistiques et journalisation: puisque les modules sont appelés pour chaque demande, ils peuvent être utilisés pour collecter des statistiques et pour enregistrer des informations.

En-tête personnalisé: puisque la réponse peut être modifiée, on peut ajouter des informations d'en-tête personnalisées à la réponse.

Mohammad Niazmand
la source