IIS5请求与响应过程:
1、接收客户端请求
当一个HTTP请求从客户端发送过来之后会被WEB服务器进行Queue并进行分解归类:
2、静态页面请求
如果某个请求仅包含静态文件的请求,比如CSS,JS,Html文件或者虚拟目录所包含的文件如图片,IIS直接提取对应的文件将其作为Http Response返回给Client。
3、动态页面请求
如果一个请求中包含动静态请求,那么静态内容会等到动态内容生成HTML后组合在一起返回给Client。
但是对于这些需要进一步处理的动态执行的文件,IIS必须将Request进一步传递给对应的处理程序,待处理程序执行完毕获得最终的Http Response通过IIS返回给Client。
①、对于IIS5来说,这些处理程序通过ISAPIExtension来体现。ISAPI Extension接收到请求页的扩展名之后会到IIS的Metadata database维护着一个称为ISAPI Extension Mapping的数据表查询,负责将不同类型的Resource影射到对应的ISAPI Extension。对应.ASPX的Mapping是ASP.NET ISAPI,
至此,ASP.NET ISAPI会创建一aspnet_wp.exe的worker process(若该Process不存在的话)。
②、当地一个ASP.NET接收到Application中的任何一个.ASPX请求时,名为ApplicationManager的类会创建一个ApplicationDomain(应用程序域)。
ApplicationDomain会为全局变量提供应用程序隔离,并允许单独写真每个应用程序。
在应用程序域中,将为名为 HostingEnvironment 的类创建一个实例,该实例提供对有关应用程序的信息(如存储该应用程序的文件夹的名称)的访问。
如果需要,ASP.NET 还可对应用程序中的顶级项进行编译,其中包括 App_Code 文件夹中的应用程序代码。
③、创建了应用程序域并对 HostingEnvironment 对象进行了实例化之后,ASP.NET 将创建并初始化核心对象,如 HttpContext、HttpRequest和 HttpResponse。
HttpContext 类包含特定于当前应用程序请求的对象,如 HttpRequest 和HttpResponse 对象。
HttpRequest对象包含有关当前请求的信息,包括Cookie 和浏览器信息。
HttpResponse 对象包含发送到客户端的响应,包括所有呈现的输出和 Cookie。
④、初始化所有核心应用程序对象之后,将通过创建HttpApplication 类的实例启动应用程序。如果应用程序具有 Global.asax 文件,则ASP.NET 会创建 Global.asax类(从 HttpApplication 类派生)的一个实例,并使用该派生类表示应用程序。
创建 HttpApplication的实例时,将同时创建所有已配置的模块。
例如,如果将应用程序这样配置,ASP.NET 就会创建一个SessionStateModule 模块。
创建了所有已配置的模块之后,将调用HttpApplication 类的 Init 方法。在处理该请求时将由 HttpApplication 类执行以下事件。
对请求进行验证,将检查浏览器发送的信息,并确定其包含潜在恶意标记.
如果已在 Web.config 文件的 UrlMappingsSection 节中配置了任何 URL,则执行 URL 映射。