开发人员应该对IIS理论层的知识了解的多一些~第四讲 HttpModule中的几大事件

本文主要介绍HttpModule,它在一个网页请求过程中是一个怎样的过程是我们要知道的,在网页加载过程中HttpModule在何时被执行也是我们要知道的,以及,HttpModule在网页请求过程中,所被触发的各个事件也是我们要知道的,下面就带着问题来看文章吧

ASP.NET对请求处理的过程

当请求一个*.aspx文件的时候,这个请求会被inetinfo.exe进程截获,它判断文件的后缀(aspx)之后,将这个请求转交给 ASPNET_ISAPI.dll(否则交给对应的应用程序去解释它),ASPNET_ISAPI.dll会通过http管道(Http PipeLine)将请求发送给ASPNET_WP.exe进程,在ASPNET_WP.exe进程中通过HttpRuntime来处理这个请求,处理完 毕将结果返回客户端。

下面看一个各个术语的含义

inetinfo.exe进程:是www服务的进程,IIS服务和ASPNET_ISAPI.DLL都寄存在此进程中。
ASPNET_ISAPI.DLL:是处理.aspx文件的win32组件。其实IIS服务器是只能识别.html文件的,当IIS服务器发现被请求的文件是.aspx文件时,IIS服务器将其交给aspnet_isapi.dll来处理。
aspnet_wp.exe进程:ASP.NET框架进程,提供.net运行的托管环境,.net的CLR(公共语言运行时)就是寄存在此进程中。

aspnet_wp处理一个Http Request的流程

 HttpRequest-->

inetinfo.exe-->

ASPNET_ISAPI.dll-->

ASPNET_WP.exe-->

HttpRuntime-->

HttpApplication Factory-->

HttpApplication-->

HttpModule-->

HttpHandler Factory-->

HttpHandler-->

HttpHandler.ProcessRequest()

通过上面的流程中,我们可以看到HttpModel在何时被执行的。
ASP.NET请求处理过程是基于管道模型的,这个管道模型是由多个HttpModule和HttpHandler组成,ASP.NET 把http请求依次传递给管道中各个HttpModule,最终被HttpHandler处理,处理完成后,再次经过管道中的HTTP模块,把结果返回给 客户端。我们可以在每个HttpModule中都可以干预请求的处理过程。

注意:在http请求的处理过程中,只能调用一个HttpHandler,但可以调用多个HttpModule

HttpModule会注册以下事件

        AcquireRequestState 当ASP.NET运行时准备好接收当前HTTP请求的对话状态的时候引发这个事件。
        AuthenticateRequest 当ASP.NET 运行时准备验证用户身份的时候引发这个事件。
        AuthorizeRequest 当ASP.NET运行时准备授权用户访问资源的时候引发这个事件。
        BeginRequest 当ASP.NET运行时接收到新的HTTP请求的时候引发这个事件。
        Disposed 当ASP.NET完成HTTP请求的处理过程时引发这个事件。
        EndRequest 把响应内容发送到客户端之前引发这个事件。
        Error 在处理HTTP请求的过程中出现未处理异常的时候引发这个事件。
        PostRequestHandlerExecute 在HTTP处理程序结束执行的时候引发这个事件。
        PreRequestHandlerExecute 在ASP.NET开始执行HTTP请求的处理程序之前引发这个事件。在这个事件之后,ASP.NET 把该请求转发给适当的HTTP处理程序。
        PreSendRequestContent 在ASP.NET把响应内容发送到客户端之前引发这个事件。这个事件允许我们在内容到达客户端之前改变响应内容。我们可以使用这个事件给页面输出添加用于所有页面的内容。例如通用菜单、头信息或脚信息。
        PreSendRequestHeaders 在ASP.NET把HTTP响应头信息发送给客户端之前引发这个事件。在头信息到达客户端之前,这个事件允许我们改变它的内容。我们可以使用这个事件在头信息中添加cookie和自定义数据。
        ReleaseRequestState 当ASP.NET结束所搜有的请求处理程序执行的时候引发这个事件。
        ResolveRequestCache 我们引发这个事件来决定是否可以使用从输出缓冲返回的内容来结束请求。这依赖于Web应用程序的输出缓冲时怎样设置的。
        UpdateRequestCache 当ASP.NET完成了当前的HTTP请求的处理,并且输出内容已经准备好添加给输出缓冲的时候,引发这个事件。这依赖于Web应用程序的输出缓冲是如何设置的。

好了,有了上面的基础知识之后,相信各位对HttpModule有了一个全新的认识了吧。

本文转自博客园张占岭(仓储大叔)的博客,原文链接:开发人员应该对IIS理论层的知识了解的多一些~第四讲 HttpModule中的几大事件,如需转载请自行联系原博主。

时间: 2024-10-26 09:53:37

开发人员应该对IIS理论层的知识了解的多一些~第四讲 HttpModule中的几大事件的相关文章

开发人员应该对IIS理论层的知识了解的多一些~第二讲 静态网页与动态网页如何被解释执行的

从客户端发个请求到服务器,服务器会判断这个文件是静态的HTML,图像,还是动态的(asp,.net,jsp,php等等),再根据它们去选择IIS的处理程序(handler),如果是静态文件直接由IIS进行相应,而如果是动态文件,则交给aspnet_isapi处理程序去响应它,如图所示:    第一次请求时创建HttpRuntime对象:  为每个请求创建对象(HttpContext)  为每个请求创建HttpApplication对象: 下面是个详细的.net http的三大核心对象,我们在以后

开发人员应该对IIS理论层的知识了解的多一些~第三讲 网页从IIS端到客户端浏览器经历的阶段

你有没有想过,当用户打开浏览器,输入网址,回车,然后浏览器上就会出现网站的内容,在这个过程中,是怎么的一个过程呢! 当请求一个*.aspx,*.html,*.jpg文件的时候,这个请求会被inetinfo.exe进程截获,它判断文件的后缀为aspx之后,将这个请求转交给ASPNET_ISAPI.dll,ASPNET_ISAPI.dll会通过(Http PipeLine将请求发送给ASPNET_WP.exe进程,在ASPNET_WP.exe进程中通过HttpRuntime来处理这个请求,处理完毕将

开发人员应该对IIS理论层的知识了解的多一些~目录

如果你是一个开发人员,如果你对HTTP一些理论知识了解不透彻,那本系列文章将会很适合你,一个好的WEB开发人员,他一定是一个了解HTTP请求的人,一个好的WinForm开发人员,他一定是一个了解windows系统知识的人,呵呵! 开发人员应该对IIS理论层的知识了解的多一些-目录 第一讲 什么是Http? 第二讲 静态网页与动态网页如何被解释执行的 第三讲 网页从IIS端到客户端浏览器经历的阶段 第四讲 HttpModule中的几大事件 第五讲 HttpHandler在实际项目中用法 第六讲 H

一个让开发人员仅通过声明式代码的方式实现智能数据结构的Java框架

一个朋友的框架发布1.1版本,和1.0在运行时生成额外字节码不同,1.1在编译时通过maven插件生成额外字节码,因此避免了暴露微量的设计模式给用户,让用法更简单粗暴,性能也更高.很大一部分不太像框架了,而更像是java语言的扩展,是个重大升级.此外,充分吸取1.0的教训,给出架构图并,让所有文档中英文双版,避免别人不明全局.另外,不再兼容java7. 原文 - https://github.com/babyfish-ct/babyfish/blob/master/README_zh_CN.md

VSTS中,如何让开发人员没有bug关闭权限,只能将bug改成已解决

问题描述 VSTS中,如何让开发人员没有bug关闭权限,只能将bug改成已解决 单位用VSTS中的team foundation server进行bug管理,开发人员属于参与者,但是这个组的权限设定是可以对bug进行关闭的,如何进行下设置,使开发人员不能关闭bug,能将bug改成已解决

技术人观点:开发人员在处理云应用时该注意什么?

我们与28位分别来自23家企业的高管人员进行了交流,希望了解这些负责立足于云环境进行应用程序开发与部署的技术领导者如何看待相关议题. 当被问及"开发人员需要在处理云应用时注意什么?"时,各位企业高管人员给出了以下意见与建议: 应用程序性能管理应该分为主动与被动两类,特别是在面对开发与生产等不同场景的情况下.我们需要在开发阶段获取更多测试信息.APM工具将帮助我们在应用直接触及生产环境前对其加以测试,并有效缩短产品进入生产环境并被交付至用户手中的周期. 了解应用程序的十二因素.如何对应用

8个对于Web设计和开发人员非常有用的在线工具

导读:作者Henry Jones写了一篇<8 Useful Online Tools for Web Designers and Developers>,现将译文<8个对于Web设计和开发人员非常有用的在线工具>转载,以下是文章内容: 在工作中借助一些非常好用的工具可以让你专注于更重要的事情,进而提高工作效率.本文收集了一些设计和开发相关的在线工具,分享给大家,希望对你有帮助. ProCSSor ProCSSor是一个很不错的CSS代码美化工具,它可以帮助你很轻松的把代码转换成很美

Access 开发人员常犯错误大全_ASP基础

错误一:陷入界面设计陷阱.漂亮的姑娘喜欢穿美丽的衣服,丑姑娘也喜欢美丽的衣服,可ACCESS除了提供定制菜单与开关面版之外,不提供任何定制控键的功能.你如果想使用自己的按扭,得编写许多许多代码,非常麻烦.为什么,为什么你们总放着现成的菜单不用,而要自己编写一整界面.累不累.值得吗,有没有人愿意为你的界面支付更多钱.     错误二:不使用DAO,而使用ADO.请记住DAO是世界上访问mdb文件有最高效率的数据库引擎,因为DAO直接内嵌在ACCESS运行环境中.在ACCESS中使用ADO如同打电话

Access 开发人员常犯错误大全

错误一:陷入界面设计陷阱.漂亮的姑娘喜欢穿美丽的衣服,丑姑娘也喜欢美丽的衣服,可ACCESS除了提供定制菜单与开关面版之外,不提供任何定制控键的功能.你如果想使用自己的按扭,得编写许多许多代码,非常麻烦.为什么,为什么你们总放着现成的菜单不用,而要自己编写一整界面.累不累.值得吗,有没有人愿意为你的界面支付更多钱. 错误二:不使用DAO,而使用ADO.请记住DAO是世界上访问mdb文件有最高效率的数据库引擎,因为DAO直接内嵌在ACCESS运行环境中.在ACCESS中使用ADO如同打电话给坐在桌