//网站根目录 var __ID_HOME__="#zj_home"; //生产环境设置为true,本地设置为false var __JS_DEBUG__= true; var __JS_APP__ = ""; var __JS_APP_HOME__ = "/"; var __JS_PUBLIC__ = "/Public"; var __JS_HOME__ = "/Template/default/Home/Public"; var _URL_SIGN = "http://www.zhangjunbk.com:80/sign"; var _URL_LOGIN = "http://www.zhangjunbk.com:80/login"; var _URL_REG = "http://www.zhangjunbk.com:80/reg"; var _URL_FORGET = "http://www.zhangjunbk.com:80/forget"; var _URL_SEND_EMAIL = "http://www.zhangjunbk.com:80/sendEmail"; var _URL_SEND_MOBILE = "http://www.zhangjunbk.com:80/sendMobile"; var _URL_RELATION_EMAIL = "http://www.zhangjunbk.com:80/relationEmail"; var _URL_SIGN_RELATION_EMAIL = "http://www.zhangjunbk.com:80/sign_relation"; var _URL_FRONT_LOGOUT="/frontlogout"; var _URL_CHECK_LOGIN = "http://www.zhangjunbk.com:80/check_login"; var _URL_PAY_POINTS = "http://www.zhangjunbk.com:80/payPoints"; var _URL_PAY_POINTS_VIDEO = "http://www.zhangjunbk.com:80/payPointsVideo"; var _URL_USER_POINTS = "http://www.zhangjunbk.com:80/uindex"; var _URL_AJAX_STOCK_SEALING = "http://www.zhangjunbk.com:80/ajaxStockSealing"; var _URL_API_WX_CREATE = "http://www.zhangjunbk.com:80/wxV2Create"; var _URL_API_WX_CREATE_NATIVE_REWARD = "http://www.zhangjunbk.com:80/wxV2CreateNative_reward"; var _URL_CENTER_USER = "http://www.zhangjunbk.com:80/centerUser"; var _URL_QQ = "{https://www.zhangjunbk.com/oauth/callback/}";

IIS架构与HTTP请求处理流程(3)

系统 1714 0

ASP.NET Web编程原理 之

IIS架构与HTTP请求处理流程(3)

续前文

8.1.4 HTTP请求的处理过程

在了解了 IIS 的架构之后,来看一下 IIS 架构中的各个组成部分是如何相互配合处理 HTTP 请求的。

先来从总体上看看 HTTP 请求的处理过程( 8 10 )。

http请求处理过程

<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1028" style="width: 415.5pt; height: 180pt;" o:ole="" type="#_x0000_t75"><imagedata o:title="" src="file:///C:%5CUsers%5CJINXUL%7E1%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_image001.emz"></imagedata></shape> 8 10 HTTP 请求的处理过程

8 10 清晰地展示出了 HTTP 请求处理就是浏览器与 Web 服务器间“一问一答”的过程

首先,浏览器尝试连接 Web 服务器的 80 端口,如果 Web 服务器可以响应此连接请求,就在浏览器与 Web 服务器间建立了一个通讯链路,在此“通道”上浏览器与 Web 服务器可以相互发送与接收信息。

假设浏览器向 Web 服务器发出一个读取某 ASP.NET 站点上的某个 ASPX 网页的请求。当此请求通过网络到达 Web 服务器时,此请求被 HTTP.SYS 组件所接收。 HTTP.SYS 系统组件会检查此 HTTP 请求的相关信息,根据其 URL 将此 HTTP 请求发送给运行在某个应用程序池中的工作者进程处理。如果同时有多个针对此 ASP.NET 站点的 HTTP 请求, HTTP.SYS 会将这些请求排队,加入到对应的应用程序池的 HTTP 请求队列中等待。

如果这是第一个对 ASP.NET 站点的 HTTP 请求,工作者进程会加载 aspnet_isapi.dll ,并将请求转给它, aspnet_isapi.dll 接着会装载 .NET CLR [1] 创建一个针对此 ASP.NET 站点的应用程序域 [2] ,然后启动一个复杂的由多个步骤和组件参与的处理流程,当此处理流程结束,要发回给客户端的结果(通常是 HTML 代码,当然也可以是其他类型的资源,比如由程序动态生成的图片)已经生成,此结果被转发给 HTTP.SYS

注意: 对于以集成模式运行的 IIS 7 .NET CLR 在应用程序池一启动就自动装载,从而避免了临时装载 CLR 的花销。后继处理过程与 IIS 6 基本一致。

HTTP.SYS 接收到请求的处理结果之后,将其缓存到缓冲区中,然后把处理结果发回给发出 HTTP 请求的浏览器。

上述过程是对 IIS 处理 HTTP 请求全过程的粗略描述。 8.2 节将选取这个处理过程中的主要阶段,详细介绍针对 ASP.NET 网页的 HTTP 请求处理过程。


8.1.5 ISAPI扩展、ISAPI筛选器和程序映射

IIS 的文档中经常会提到两个术语: ISAPI 扩展和 ISAPI 筛选器。

1 ISAPI 扩展

ISAPI 扩展( ISAPI Extension ”是一种可以添加到 IIS 中以增强 Web 服务器功能的程序,其载体为 DLL 文件。它通常直接负责响应 HTTP 请求。

根据 HTTP 请求要访问的资源扩展名(通过 URL 获取), IIS 会选取特定的 ISAPI 扩展来处理这一请求,这一过程被称为“ 程序映射 而用于响应 HTTP 请求的这一 ISAPI 扩展被称为“ HTTP Handler HTTP 处理程序) ”。 8 11 展示了 IIS 6 中的程序映射。


程序映射

<shape id="图片_x0020_8" style="visibility: visible; width: 301.5pt; height: 329.25pt;" type="#_x0000_t75" alt="IIS2" o:spid="_x0000_i1025"><imagedata o:title="IIS2" src="file:///C:%5CUsers%5CJINXUL%7E1%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_image002.jpg"><font size="3" color="#000000"></font></imagedata></shape>

8 11 程序映射( IIS 6

8 11 中可以看到, IIS 指定对 ASP.NET 网页(其扩展名为 .aspx )的请求将由 aspnet_isapi.dll 处理( 8 12 )。

编辑映射

<shape id="图片_x0020_9" style="visibility: visible; width: 302.25pt; height: 170.25pt;" type="#_x0000_t75" alt="无标题" o:spid="_x0000_i1026"><imagedata o:title="无标题" src="file:///C:%5CUsers%5CJINXUL%7E1%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_image003.png"><font size="3" color="#000000"></font></imagedata></shape>

8 12 aspnet_isapi.dll 负责处理对 ASP.NET 网页的请求

IIS 7 中的程序映射与 IIS 6 略有不同。当 IIS 7 以“经典模式”运行时,与 IIS 6 一样使用 aspnet_isapi.dll 响应针对“ .aspx ”的请求。但当 IIS 7 以“集成模式”运行时,则使用托管处理程序( System.Web.UI.PageHandlerFactory )响应针对“ .aspx ”的请求( 8 13 )。



IIS7下的程序映射

<shape id="图片_x0020_4" style="visibility: visible; width: 248.25pt; height: 221.25pt;" type="#_x0000_t75" o:spid="_x0000_i1027"><imagedata o:title="" src="file:///C:%5CUsers%5CJINXUL%7E1%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_image004.png"><font size="3" color="#000000"></font></imagedata></shape>

8 13 IIS 7 集成模式下的程序映射

2 ISAPI 筛选器

“ISAPI筛选器( ISAPI Filter 也是一种 DLL ,但它不负责生成 HTTP 请求,它的主要作用是响应某些特定的事件。当这些事件发生时 ISAPI 筛选器被调用,它可以修改传入或传出的 HTTP 数据。

IIS 7 中,使用“ HTTP 模块( HTTP Module 取代了传统 ISAPI 筛选器的功能。

注意: ISAPI 扩展与 ISAPI 筛选器名字很相近,但其在 IIS 中的地位和所起的作用是不同的。



[1] CLR Comon Language Runtime ):通用语言运行时,是 .NET 的核心,可以将其看成是一台虚拟的专用于运行 .NET 程序的计算机。

[2] 应用程序域( Application Domain ): .NET 引入的一种代码隔离机制,一个托管进程可以拥有多个应用程序域,在应用程序域中可以装载程序集,创建特定类型的对象,调用对象的方法。



*********************************************************

下一部分,将在本部分所介绍内容的基础上,详细介绍与ASP.NET开发密切相关的“ASP.NET请求处理管线(HTTP Pipe Line)”

IIS架构与HTTP请求处理流程(3)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论