HTTP 流程

   

    asp.net 中http请求的页面通过Imodul,Ihandler,Page页面,处理成HTML代码 返回到IIS 中去了

   HTTP.sys 是操作系统的核心组件,是操作系统侦听HTTP请求的驱动程序,

    HTTP.sys 获取请求后inetinfo.exe(Internet Information Services)就是IIS的处理程序,

    IIS把HTTP请求通过 ISAPI(Internet Service application pregrams  interface) 系统筛选,

    再在CRL里面生成一个httpapplication  创建httprequest  httpresponse 等对象,在传递到httpmodule  再到httphandler  再到httpmodule 再到 httpapplication  把生成页面返回到 HTTP .sys 发回请求端。生成页面,

    所有asp.net页面都继承Page类。而Page继承Httphandler  ,也就是说所有asp.net页面实际上都实现Ihttphandler ,执行返回HTML代码,或者数据流。极端思维:我们甚至不用HTMl页面直接在 httphandler 返回数据量或者HTML代码。就行。

     HTTP请求------>Http.sys捕获------->IIS处理------>ISAPI处理(根据不同后缀名,找对应的处理程序)----->创建HTTPAplication(包含httprequest,httpresponse等对象)------>Httpmodule----->IHttphandler(所以得Page页面都实现了个接口)------>Httpmodule----->IIS------>HTTP.sys---->返回给客户端 

   ISAPI 对应处理程序实际上是IHttphandler来实现的;

   httphandler 在web.config中的配置

    path:请求的正则匹配,只有满足匹配时才执行这个httphandler

    verb:http请求的方式;如:get post,head,debug。四种方式

    type:httphandler的命名空间

   <httpHandlers>
            <add path="*.cd" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
            <add path="*.adprototype" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
            <add path="*.lddprototype" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
            <add path="*.sdm" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
            <add path="*.sdmDocument" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
            <add path="*.mdf" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
            <add path="*.ldf" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
           
        </httpHandlers>

   httpmodule在web.config 中的配置

      name:httpmoudule的名称  type:httpmodule的命名空间;

 <httpModules>
            <add name="Profile" type="System.Web.Profile.ProfileModule" />
            <add name="ErrorHandlerModule" type="System.Web.Mobile.ErrorHandlerModule, System.Web.Mobile, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
            <add name="ServiceModel" type="System.ServiceModel.Activation.HttpModule, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
            <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" />
            <add name="ScriptModule-4.0" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
        </httpModules>

   

    

原文地址:https://www.cnblogs.com/jiangqiang/p/2780001.html