在CSAPP中看到Web Server的部分内容, 联想到经常使用IIS, 所以准备了解一点. p9~p15.
IIS7特性
管道集成
IIS 7.0将ASP.NET与请求管道进行了集成, IIS 7提供了统一的事件管道, 之前有一个2种独立的管道-- IIS管道和ASP.NET管道. 为了向后兼容, IIS 7提供了Classic管道模式, 可以模拟IIS 6.0的IIS管道, 也可模拟IIS 6.0的ASP.NET管道.
IIS6 请求流程
浏览器 -> (IIS管道) HTTP.SYS -> 对请求处理, 判断是静态, 还是CGI, 还是ISAPI, 如果是ISAPI, 还要区分PERL, ASPX, php -> (ASP.NET管道) ASPNET_ISAPI.dll处理 -> 返回结果给HTTP.SYS -> 返回浏览器.
IIS7 请求流程
浏览器 -> (集成管道) HTTP.SYS -> 对请求处理, 判断是静态, 还是aspx, 还是ISAPI ->
执行完成后返回给HTTP.SYS -> 返回浏览器
对于.aspx文件, 过程中不需要ISAPI的处理.
可配置性
IIS7的另一变化是, 不需要单独对IIS做配置, IIS的配置可直接配置在应用程序中. IIS7 使用一个名为applicationHost.config文件保存设置, 也可以保存到web.config文件中, IIS的配置保存在web.config的system.webServer一节.
组件化
开发可以自行开发组件直接注入到处理管道中, 不需要再使用ISAPI过滤器来修改请求过程. 如果不喜欢windows身份验证, 可以使用forms身份验证, 或者忽略所有内置的身份验证, 而采用我们开发的身份验证.