HTTP 处理程序与 HTTP 模块

有人能用不到两句话解释一下两者之间的区别吗?是的,我知道谷歌可以提供成百上千的答案,但不是两个清晰的句子中的一个:)

86531 次浏览

这两句话:

HttpModule 将对应用程序的每个请求执行,不管扩展名是什么,通常用于安全、统计、日志记录等方面。

HttpHandler 通常与特定的扩展相关联,用于 RSS 提要、动态图像生成或修改等等。

如果还不清楚的话,再解释一下:

我对它们的看法是: 模块“插入”到请求管道,而处理程序“处理”特定的文件扩展名。因此,如果您有一个带有 LoggingModule 和 PdfHandler 的站点,它们都将执行对 http://example.com/sample.pdf的请求,而日志模块将单独执行对 http://example.com/page.aspx的请求。

在 MSDN: HTTP 处理程序和 HTTP 模块概述上有一篇关于这种差异的文章非常清楚

HttpHandler 是请求列车前往的地方,HttpModule 是沿途的一个站点。

HTTP 处理程序是响应向 ASP.NET Web 应用程序发出的请求而运行的进程。 HTTP 模块允许您检查传入和传出请求,并根据请求采取行动。

HTTP 处理程序是实际根据设置进行编译的地方。例如,如果页面扩展名是。Aspx 然后它将通过 system.web.UI 编译。帕格汉德尔工厂。一旦在 HTTP 句柄请求下完成编译,将通过 HTTP 模块和 IIS。

关于它的好文章 HttpModule-and-HttpHandlers

参考文献: INFO: ASP.NET HTTP 模块和 HTTP 处理程序概述

”在处理程序执行之前和之后调用模块。模块使开发人员能够拦截、参与或修改每个单独的请求。处理程序用于处理单个端点请求。处理程序使 ASP.NET Framework 能够处理应用程序中的各个 HTTP URL 或 URL 扩展组。与模块不同,只有一个处理程序用于处理请求”。

HttpHandler 负责扩展处理 http 请求,而 HttpModule 负责响应应用程序生命周期事件。

HttpHandler 和 HttpModule 的主要和共同目标是在 ASP.NET 请求到达 IIS 服务器之前注入预处理逻辑。

NET 提供了两种在请求管道中注入逻辑的方法;

  1. Http 处理程序: Http Handler 帮助我们根据请求的文件扩展名注入预处理逻辑。NET 使用 HTTP 处理程序来实现它自己的许多功能。例如,ASP.NET 使用处理程序进行处理。阿斯伯格综合症。Asmx 和 trace.axd 文件。

例如: RSS 提要: 要为网站创建 RSS 提要,可以创建一个发出 RSS 格式的 XML 的处理程序。因此,当用户向您的站点发送请求时,结果是。ASP.NET 调用您的处理程序来处理请求。

创建 Handler 涉及三个步骤 1. 实现 IHttpHandler 接口。 2. web.config 或 machine.config 文件中的注册处理程序。 3. 将文件扩展名(* . arshad)映射到 IIS 中的 aspnet _ isapi.dll。

IHttpHandler 接口具有 ProcessRequest 方法和需要实现的 IsReuse 属性。 ProcessRequest: 在此方法中,编写为处理程序生成输出的代码。 IsResable: 此属性说明此处理程序是否可以重用。

您可以像下面这样在 web.config 文件中注册处理程序

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

注意: 这里我们处理任何扩展名 arshad 的文件名。

  1. Http 模块: HttpModule 是一个基于事件的处理器,用于在请求到达 IIS 服务器之前注入预处理逻辑。NET 使用 HTTP 模块实现了许多自己的功能,如身份验证和授权、会话管理和输出缓存等。

当请求通过请求管道时,ASP.NET 引擎发出许多事件。 其中一些事件是 AuthenticateRequest、 AuthorizeRequest、 BeginRequest、 EndRequest。 通过使用 HttpModule,您可以在这些事件中编写逻辑。这些逻辑在事件触发并在请求到达 IIS 之前执行。

创建模块涉及两个步骤, 1. 实现 IHttpModule 接口 2. 在 web.config 或 machine.config 文件中注册模块

例如: 安全性: 使用 HTTP 模块,可以在请求到达 IIS 之前执行自定义身份验证或其他安全性检查。

HTTP 处理程序

HTTP 处理程序是响应 HTTP 请求而运行的进程。因此,每当用户请求文件时,处理程序都会根据扩展名处理该文件。因此,当需要基于文件扩展名进行特殊处理时,将创建自定义 http 处理程序。让我们考虑一个为站点创建 RSS 的示例。因此,创建一个生成 RSS 格式的 XML 的处理程序。现在绑定。自定义处理程序的 rss 扩展。

HTTP 模块

HTTP 模块插入到请求的生命周期中。因此,当处理请求时,将通过请求管道中的所有模块传递请求。因此,一般来说,http 模块用于:

安全性: 用于在处理请求之前对请求进行身份验证。

统计和日志记录: 由于每个请求都要调用模块,因此可以使用它们收集统计数据和记录信息。

自定义标头: 由于响应可以修改,因此可以向响应添加自定义标头信息。