天天看点

IIS请求处理流程

IIS请求处理流程

一、IIS管道模型

1.1 IIS 6.0

IIS请求处理流程

1.2 IIS 7.0

二、管道事件

三、ASP.NET MVC请求到响应的基本流程

一、IIS管道模型

1.1 IIS 6.0

在IIS 6.0和早期版本中,ASP.NET被实现为IIS的ISAPI扩展。

对于ASP.NET内容类型的请求,会被转发到承载ASP.NET请求管道和页面框架的ASP.NET的 isapi.dll

对非ASP.NET内容(例如ASP页或静态文件)的请求则由IIS或其他ISAPI扩展进行处理,并且对ASP.NET不可见

1.2 IIS 7.0

IIS 7.0 将ASP.NET管道与自身管道集成在一起,通过模块化的方式进行组合和拓展

IIS请求处理流程

二、管道事件

在集成模式下,暴露给模块的ASP.NET请求处理阶段直接连接到IIS管道的相应阶段。完整的管道包含以下阶段,这些阶段在ASP.NET中作为HttpApplication事件公开:

事件 描述

1.BeginRequest 请求处理开始

2.AuthenticateRequest 该请求已通过身份验证。IIS和ASP.NET身份验证模块订阅此阶段以执行身份验证

3.PostAuthenticateRequest

4.AuthorizeRequest 该请求被授权。IIS和ASP.NET授权模块检查经过身份验证的用户是否有权访问所请求的资源

5.PostAuthorizeRequest

6.ResolveRequestCache 高速缓存模块检查对此请求的响应是否存在于高速缓存中,然后将其返回,而不是继续执行其余的执行路径。ASP.NET输出缓存和IIS输出缓存功能均执行

7.PostResolveRequestCache

8.MapRequestHandler 此阶段在ASP.NET中是内部的,用于确定请求处理程序

9.PostMapRequestHandler

10.AcquireRequestState 检索执行请求所需的状态。ASP.NET会话状态和配置文件模块获取其数据

11.PostAcquireRequestState

12.PreExecuteRequestHandler 执行处理程序之前的所有任务

13.ExecuteRequestHandler 请求处理程序执行。提供ASPX页,ASP页,CGI程序和静态文件

14.PostExecuteRequestHandler

15.ReleaseRequestState 请求状态更改已保存,并在此处清除状态。ASP.NET会话状态和配置文件模块使用此阶段进行清理

16.PostReleaseRequestState

17.UpdateRequestCache 响应存储在缓存中以备将来使用。执行ASP.NET输出缓存和IIS输出缓存模块以将响应保存到其缓存中

18.PostUpdateRequestCache

19.LogRequest 此阶段记录请求的结果,并确保即使发生错误也可以执行

20.PostLogRequest

21.EndRequest 此阶段执行所有最终请求清除,并确保即使发生错误也可以执行

三、ASP.NET MVC请求到响应的基本流程

IIS请求处理流程