【IIS】我所理解的IIS处理ASP.NET页面请求过程

众所周知,一个完整的动态网页的从请求到响应无非包括以下3个步骤:

1、浏览器客户端发出http请求。

2、IIS服务端接受请求。

3、处理请求并输出请求结果到浏览器客户端。

首先,简单的说说我所理解的IIS,它依赖于Windows服务World Wide Web Publish
Service的,并依赖于进程w3wp.exe的。也就是说IIS的运行离不开工作进程w3wp.exe,同时每个IIS站点下的应用程序都是被用用程序池进行隔离,应用程序池即w3wp.exe的容器,通过池隔离的机制保证当某个应用程序池出错即网站出现错误或进程资源回收时候,不会影响到其他应用程序池中的应用正常访问,接下来说说具体的IIS处理细节:

1、从IIS6.0版本开始,引入了文件HTTP.SYS(一个位于Win2003和WinXP SP2中核心组件据我了解支持IIS的操作系统中均有此文件,它能够让任何应用程序通过它提供的接口,以http协议进行信息通讯)。当浏览器发出请求地址,地址自动解析到某台IP对应的服务器,该服务器中的IIS站点会自动触发文件HTTP.SYS,此时的HTTP.SYS会自动寻找到对应的应用程序池ID,这里的应用程序池ID是在开发者活实施人员部署这个站点站点之后已自动注册到HTTP.SYS,所以HTTP.SYS才能准确的应用程序池定位。因此一个HTTP.SYS是对应到多个应用程序池的。

2、当应用程序池接收到用户发来的请求后,会接着传给工作进程,即w3wp.exe进程,该进程检查来请求的URL后缀以确定加载哪个ISAPI扩展。ASP.NET加载时会附带自己的ISAPI扩展(aspnet_isapi.dll),以便在IIS中映射,这个映射可以在IIS的管理中心进行配置与查看。

3、一旦工作进程加载了aspnet_isapi.dll,
就会构造一个HttpRuntime类,该类是应用程序的入口,通过ProcessRequest方法处理请求。

4、方法ProcessRequest被调用后,一个HTTP上下文对象即HttpContext的实例就产生了。可通过HTTPContent.Current获取到这个实例,且该实例会在整个生命周期中存活,我们通过它可以获取到一些常用对象,如Request,Response,Session
等。

5、之后HttpRuntime会通过HttpApplicationFactory类加载一个HttpApplication对象。每一次请求都要穿过一堆HttpModule到达HttpHandler,以便被响应。而这些HttpModule就被配置在HttpApplication中。同时,开发者也可自定义HttpModule从而来完成一些特殊的http拦截与相应的处理。

6、所有请求穿过HttpModule需抵达相应的HttpHandler,然后HttpHandler根据请求资源,产生并输出内容。

完成整个步骤后,ASP.NET页面生命周期就开始了。

个人总结:对于IIS处理机制的理解有助于加深开发人员对于Form验证、windows验证模式、HTTP拦截处理的原理的认识,以及IIS网站的性能的优化都会有一定的指导作用。

【IIS】我所理解的IIS处理ASP.NET页面请求过程

时间: 2024-12-20 07:37:31

【IIS】我所理解的IIS处理ASP.NET页面请求过程的相关文章

ASP.NET 页面请求超时时间设置 Server.ScriptTimeOut executionTimeout

ASP.NET 页面请求超时时间(页面后台程序执行时间)默认值为 110 秒(在 .NET Framework 1.0 版和 1.1 版中,默认值为 90 秒) 即: Server.ScriptTimeout = 110(HttpServerUtility.ScriptTimeout = 110) System.Web.Configuration.HttpRuntimeSection().ExecutionTimeout.ToString() = 00:01:50(110 秒) 方法一:设置 S

asp.net 页面请求原理

IIS 所收到的对某 Microsoft ASP.NET 页面的每个请求都被移交给 ASP.NET HTTP 管线.HTTP 管线由一系列托管对象组成,这些对象按顺序处理该请求,并完成从 URL 到普通 HTML 文本的转换.HTTP 管线的入口点是 HttpRuntime 类.要激活 HTTP 管道,可以创建一个 HttpRuntime 类的新实例,然后调用其 ProcessRequest 方法. ***一个完整的页面请求会包括下面的流程***: 首先被WWW服务器截获(inetinfo.ex

记一次完整的asp.net-mvc页面优化过程

最近在重构一个MVC项目,项目结构堪称混乱,问题多多,但今天说的是页面打开速度的问题.项目中包括web后台系统,几乎随便点一个页面都要盯着白屏等待2-5秒之久,体验很差.通过对页面性能逐步的分析和判断,并做相应优化,最终页面打开速度在300ms内. 一.项目结构 后台系统使用了典型的ASP.Net MVC框架,但是版本略旧,MVC4,EF5,基本没有采用其它的技术工具,业务逻辑大致都混乱的分布在Controller和Model层.习惯了ABP框架,相比之下这个就显得简陋了.至于View层,摘要中

asp.net 页面执行过程

Application_BeginRequest Application_AuthenticateRequest Application_AuthorizeRequest Application_ResolveRequestCache Application_MapRequestHandler Application_AcquireRequestState Application_PreRequestHandlerExecute Page_PreInit Master-> Page_Init P

ASP.NET页面请求相关常用

Request下获取Url所有相关属性 测试的url地址是http://www.cnblogs.com/dachie/default.aspx?id=1 Request.Url.ToString():http://www.cnblogs.com/dachie/default.aspx?id=1 Request.ApplicationPath: /dachie Request.CurrentExecutionFilePath: /dachie/default.aspx Request.FilePa

asp.net页面的请求处理响应的过程描述

概述 本篇博客从IIS到asp.net页面后台运行完,整个过程做一个简单的描述,如果有不对的地方,望指出. IIS处理请求的过程 我们通过浏览器(Socket客户端)访问一个IIS服务器上的网页时,该请求到达IIS服务器上后,IIS的http.sys(分发器)组件就会根据相应的判断,将其交给对应的应用程序池(IIS上都有相应的注册信息),对应的应用程序池接收到请求后,会将其交给相应的工作进程进行处理,工作进程接到请求后,根据请求文件的后缀名,进行判断,如果此文件IIS可以处理,则直接处理,如果处

ASP.NET页面周期学习笔记之一

一.ASP.NET 页面生命周期理解--重中之重的Key ASP.NET页面生命周期--理解:重中之重!!!1.基本概念:所谓的页面生命周期,指的是一个ASP.NET页面类对象从初始化到销毁经过的步凑过程:2.大致步凑:(1)初始化:PreInit,Init,InitComplete(2)加载数据和页面:LoadState,ProcessPostData,PreLoad,Load,ProcessPostData(第二次)...(3)触发事件:ChangedEvents PostBackEvent

4.1ASP.NET Core请求过程「深入浅出ASP.NET Core系列」

希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,谢谢关注. HTTP请求过程 这里展示整体的HTTP请求的过程,这里化繁为简,保留了主干流程: 从浏览器输入域名开始,这里忽略了建立TCP的3次握手,向服务器发起HTTPRequest请求,服务器接受到之后,会触发服务器对网站的动态解析,然后把生成的网页信息通过HTTPResponse返回给用户,内部包含HTML的Body,Head等信息,最后就是浏览器对这些HTML信息进行内部引擎渲染的过程了. ASP.NET Core

IIS 5.0 和 6.0 的 ASP.NET 应用程序生命周期概述

本主题概述 ASP.NET 应用程序的生命周期,列出了重要的生命周期事件,并描述了您编写的代码将如何适应于应用程序生命周期.本主题中的信息适用于 IIS 5.0 和 IIS 6.0.有关 IIS 7.0 中的 ASP.NET 应用程序生命周期的信息,请参见 IIS 7.0 的 ASP.NET 应用程序生命周期概述. 在 ASP.NET 中,若要对 ASP.NET 应用程序进行初始化并使它处理请求,必须执行一些处理步骤. 此外,ASP.NET 只是对浏览器发出的请求进行处理的 Web 服务器结构的