Asp.Net 请求处理机制

问题描述:当用户在浏览器的地址栏输入网址之后回车到页面出现在浏览器中这个过程中间发生了什么?

当用户在浏览器的地址栏输入网址然后回车,这个时候就会从浏览器生成一个Http请求,并发送到网址所在的IIS服务器上 ,当请求到达服务器的那一刻,会被Windows内核中的Http.sys组件捕获到,http.sys负责把请求文件传入到相应的应用程序池中(每一个应用程序池在http.sys中都有注册),当应用程序池接收到请求后,会接着将请求传递给工作进程(w3wp.exe),该进程检查请求的文件后缀名来确定后续处理  

  如果是静态文件(html、js、css、图片等):IIS直接将请求的文件内容返回到客户端

  如果是动态文件(.aspx):IIS就在程序映射表中进行匹配,从而将http请求交给对应的ISAPI处理【asp.net的动态文件就是交给aspnet_isapi.dll文件来处理的】

当IIS把对应的.aspx页面的请求提交给了aspnet_isapi.dll之后,IIS就不关心请求随后的处理了(Asp.Net 只是服务器(IIS)的一个组成部分而已,它是一个ISAPI扩展)

之后的处理流程

  aspnet_isapi.dll接收到Request请求的时候,它会去调动服务器中的.net framework,最终加载CLR运行环境,并创建一个isapiRuntime对象,然后调用isapiRuntime对象的ProcessRequest()方法(该函数是进入asp.net的第一个入口)。该方法调用之后主要做了一件事:就是把Request请求的原始请求信息封装成HttpWorkRequest类 ,接着执行StartProcessing()方法,来创建HttpRuntime对象并调用其静态方法ProcessRequest(),在静态函数中主要做了几件事情:

  1、为请求创建了一个新的httpContext实例(httpContext上下文对象),并将httpWorkRequest中最原始的请求报文封装到了HttpContext对象的HttpRequest对象中

  2、通过httpApplicationFactory得到了一个具体的HttpApplication实例(代表个开发人员创建的Web应用程序)

  3、调用HttpApplication的Init()方法来 初始化 各种HttpModules(通过读取配置Config文件的Modules的相关信息)

当Http请求经过一系列的httpModules的处理之后,最终会交给一个HttpHandler来进行处理,在这一步,执行实际的一些操作,通常就是页面完成的业务逻辑,然后,IIS接收返回的数据流,并重新返还给http.sys,最后http.sys再将这些数据返回给客户端浏览器。

概念补充:

  应用程序池:应用程序池是工作进程的容器,通常用来隔开不同配置的工作进程

  工作进程:在IIS中,工作进程(w3wp.exe)运行着Asp.Net应用程序,管理并响应所有的请求。

  ISAPI应用程序:指能够处理各种后缀名的应用程序。(主要工作是映射所请求的页面(文件)和与此后缀相对应的实际的处理程序)

 

  

 

 

 

 

 

Asp.Net 请求处理机制

上一篇:ThinkPHP大文件(视频)上传解决方案


下一篇:NET开源文档及报表处理