学习IIS工作的原理
我一直都在思考一个问题,当我们在地址栏输入一个网址点击回车,网页加载完的整个过程IIS是怎样工作的,今天我们就来简单的探讨一下!
1.当我们在地址栏输入一个网址点击回车,其实客户端已经向服务端发送了一个请求(根据请求者的主机头或者IP或者端口号找到对应的站点)
2.服务端的http.sys接收请求
http.sys:(Kernel的一个组件),它负责监听来自外部的HTTP请求,根据请求的URl将其转发给相应的应用程序池(application pool),当此HTTP请求处理完成时,它又负责把处理完成的结果发送出去,为了提供更好的性能,http.sys内部建立了一个缓冲区,将最近的HTTP请求保存起来.
3.http.sys收到请求后,将请求传给应用程序池的工作进程(inetinfo.exe)
工作进程:工作者进程接收到请求后,首先根据后缀找到并加载对应的ISAPI扩展 (如:aspx 对应的映射是aspnet_isapi.dll),工作者进程加载完aspnet_isapi.dll后,由aspnet_isapi.dll负责加载 ASP.NET应用程序的运行环境即CLR (.NET Runtime)。
ISAPI:能够处理各种后缀名的应用程序(NOTE:Internet Server Application Programe Interface,互联网服务器应用程序接口)。它实际上只是一个接口,起到一个代理的作用,它的主要工作是映射所请求的页面(文件) 和与此后缀名相对应的实际的处理程序。
4.如果静态页面htmlIIS的工作进程可以立即处理,找到html页面返回客户端显示,但是如果是.aspx 或cshtml等页面,IIS不能直接处理,需要先加载aspnet_isapi.dll 应用程序
5.加载完成后ISAPI会启动一个工作进程,aspnet_isapi.dll 则会通过一个Http PipeLine的管道,将这个Http请求发送给ASPNET_WP.EXE。
6.工作进程进行处理请求
个完整的HTTP请求在ASP.NET Framework的处理过程如下:
HttpRequest ——> inetinfo.exe ——> ASPNET_ISAPI.dll ——> Http Pipeline ——> ASPNET_WP.exe ——> HttpRuntime ——> HttpApplication Factory ——> HttpApplication ——> HttpModule ——> HttpHandler Factory ——> HttpHandler ——> HttpHandler.ProcessRequest()
HTTP Handler提供了类似于ISAPI Server Extention的功能,而HttpModule实现了类似于ISAPI Filter的功能。使用自定义的Handler会覆盖系统默认的Handler,而Module是可以多个同时存在的。
流程图