Asp.Net 请求处理机制

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

       当用户在浏览器的地址栏输入网址然后回车,这个时候就会从浏览器生成一个Http请求,并发送到网址所在的IIS服务器上 ,当请求到达服务器的那一刻,会被Windows内核中的Http.sys组件捕获到,然后Check请求资源的类型,并依据资源映射信息(存储在IIS元库中,一种IIS专用的配置数据库)将请求的资源分配给特定的处理程序模块。若请求的是静态资源(img,text,html等)则由IIS处理(IIS在本地Web Server上访问请求的文件),将请求的内容输出返回,发出请求的浏览器就能接收到它了。若需要在服务器端处理的请求,则会被传到已注册的扩展模块中【asp.net的动态文件就是交给aspnet_isapi.dll文件来处理的】

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

之后的处理流程

  aspnet_isapi.dll接收到Request请求的后,则会通过一个Http PipeLine的管道将这个Http请求发给w3wp.exe ,它会去调动服务器中的.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再将这些数据返回给客户端浏览器。

注意事项:

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

  2、Modules处理请求前和相应后的事件

  3、HandlerFactories提供应用程序中的Handlers:Handlers处理请求和相应

    HttpHandler实现了ISAPI Extention的功能

    HttpHandlet配置 说明

 <system.webServer> 
<handlers>
<add name="myHandler" path="*.xyz" verb="*" type="AspNetDemo.MyHandler,AspNetDemo" />
</handlers>
</system.webServer>
    • path:指定需要处理的文件(这里指定的是后缀为xyz的文件)
    • verb:指定http请求的方式(GET,HEAD,POST,DEBUG)
    • type:由两部分组成:两部分之间用逗号(,)隔开
      • 第一部分是实现了接口的命名空间+类名
      • 第二部分是位于Bin目录下的编译过的接口实现类所在的程序集名称

  4、对配置文件的加载过程

    请求一个地址:先在这个地址下面找,没有找到就一层一层往上找,直到网站根目录,然后再是框架配置文件,然后再是服务器配置文件machine.config

概念补充:

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

参考文章:

  https://www.cnblogs.com/JimmyZhang/archive/2007/09/04/880967.html

  https://www.cnblogs.com/cmblogs/p/3952008.html

  https://www.cnblogs.com/hexu6788/archive/2012/05/28/2520712.html

 

 

 

 

写写博客,方便自己也方便需要的人~~ 

posted @ 2021-01-21 14:55  会编程的厨子  阅读(113)  评论(0编辑  收藏  举报