asp.net底层http管道
2012-11-05 22:27
417 查看
客户向服务器发出请求,当请求到达web服务器的那一刻,web服务器Windows内核中的HTTP.SYS组件就会捕获到请求。当HTTP.SYS组件分析到这是一个需要交给IIS服务器处理的Http请求时,HTTP.SYS组件就会将Request请求,交给IIS服务器来处理。IIS服务器分析Request请求的context-type类型,然后从处理程序映射表中去匹配,当在处理程序映射表中能够匹配到Request请求的context-type类型时,那么IIS服务器就将请求交给映射表中所对应的程序处理,例如我们经常用的aspx就是由iis交由aspnet_isapi.dll来处理,aspnet_isapi.dll将.aspx文件发送给.NET FrameWork中CLR(公共语言运行时)进行编译,编译后将HTML流返回给浏览器。
这在IIS服务器上是可以来配置的,配置中默认.aspx文件是由aspnet_isapi.dll来处理的,其实也可以去添加某种特定类型的文件由特定的可执行文件来处理,如:可以添加一个.apx文件来由aspnet_isapi.dll来处理。
说一下IIS服务的一些知识:
IIS本事是不支持动态页面的,也就是说它仅仅支持静态html页面的内容,对于如.aspx,.php,.cs等,IIS并不会处理这些标记,它就会把它当作文本,丝毫不做处理发送到客户端。为了解决这个问题。IIS有一种机制,叫做ISAPI的筛选器,它是一个标准组件(COM组件。) ASP.NET服务在注册到IIS的时候,会把每个扩展可以处理的文件扩展名注册到IIS里面(如:*.aspx,*.php等),扩展启动后,就根据定义好的方式来处理IIS所不能处理的文件,然后把控制权跳转到专门处理代码的进程中(如*.aspx由aspnet_isapi.dll来处理)。让这个进程开始处理代码,生成标准的HTML代码,生成后把这些代码加入到原有的HTML代码中,最后把完整的HTML返回到IIS,IIS再把内容发送给客户端。
总结:客户端——>服务器windows内核中的HTTP.SYS组件[b]——>IIS[b]——>客户端浏览器(没有相对应的程序处理html.css.js.jpg....)[/b][/b]
[b][b] [b]——>IIS[b]——>aspnet_isapi.dll(相对应的程序处理,通过文件的后缀名判断)[b]——>...[/b][/b][/b][/b][/b]
在PostMapRequestHandler事件中会创建请求的页面对象,并转换为IHttpHandler接口。我们用的页面Page:TemplateControl,IHttpHandler,在这个事件是只创建没有调用。
在AcquireRequestState事件和PostAcquireRequestState事件中,会接收到浏览器发过来的SessionId。并先会将IHttpHandler接口尝试转换为IRequiresSessionState接口,如果转换成功,Asp.Net会根据这个SessionId到服务器的Session池中去查找所对应的Session对象,并将这个Session对象赋值到HttpContext对象的Session属性。如果尝试转换为IRequiresSessionState接口不成功,则不加载Session。
在PreRequestHandlerExecute和PostRequestHandlerExecute事件中会调用PostMapRequestHandler事件中创建的页面对象的ProcessRequest方法。
/article/5723467.html
1 Application_Start Init Application_BeginRequest Application_AuthenticateRequest Application_PostAuthenticateRequest Application_AuthorizeRequest Application_PostAuthorizeRequest Application_ResolveRequestCache Application_PostResolveRequestCache Application_PostMapRequestHandler Application_AcquireRequestState Application_PostAcquireRequestState Application_PreRequestHandlerExecute 调用页面生命周期事件 Application_PostRequestHandlerExecute Application_ReleaseRequestState Application_PostReleaseRequestState Application_UpdateRequestCache Application_PostUpdateRequestCache Application_EndRequest Application_Disposed Application_End
/article/5073211.html
/article/5723467.html
/article/4671506.html
/article/5697039.html
相关文章推荐
- HTTP错误500.22 检测到在集成的托管管道模式ixan不适用的ASP.NET设置
- ASP.NET Core HTTP 管道中的那些事儿
- HTTP错误 500.23-Internal Server Error 检测到在集成的托管管道模式下不适用的ASP.NET设置
- ASP.NET 管道事件与HttpModule一个简单地实现
- ASP.NET处理用户请求的流程 IHttpModule , IHttpHandler 管道事件
- ASP.NET Web API框架揭秘:HttpMessageHandler管道[上篇]
- ASP.NET 管道事件与HttpModule, HttpHandler简单理解
- ASP.NET 管道事件与HttpModule, HttpHandler简单理解 -摘自网络
- ASP.NET 管道事件与HttpModule, HttpHandler简单理解
- 通过重建Hosting系统理解HTTP请求在ASP.NET Core管道中的处理流程[中]:管道如何处理请求
- 检测到在集成的托管管道模式下不适用的 ASP.NET 设置, HTTP 错误 500.23 解决方案
- ASP.NET 管道事件与HttpModule, HttpHandler简单理解
- Asp.Net HttpApplication请求管道与Session(一)
- .net知识系列之七:底层解密(ASP.NET底层之旅,HttpApplication类实例,HttpApplication及Global.asax,实现自定义文件类型处理)
- HTTP 错误 500.22 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP.NET 设置
- Asp.Net生命周期和Http管道技术
- HTTP 错误 500.22 - Internal Server Error检测到在集成的托管管道模式下不适用的 ASP.NET 设置
- ASP.NET底层机制 (上) HttpModule[转载]
- Asp.Net生命周期和Http管道技术
- 《ASP.NET 本质论》HttpApplication的处理管道 ,HttpMoudle,HttpHandler