IIS处理brower的一个页面请求(www.test.com/SX?a=1)的处理流程

IIS处理brower的一个页面请求(www.test.com/SX?a=1)的处理流程:
1。网址www.test.com/SX?a=1,通过域名服务器解析出www.test.com所对应的ip地址
2。根据ip地址,生成http包,通过 http get的方式传到指定服务器,被iis截获http请求
//以下是服务器端iis的处理
3。iis根据http头,把虚拟目录SX,转换为对应的物理路径
4。iis根据物理路径,搜索请求的文件,这里www.test.com/SX?a=1没有指明具体文件,则取 iis里面设置的默认主页面名称,iis里一般配置成default.htm,index.htm等。

//以下是动态语言的服务器进程的处理
5。根据所请求文件的后缀名,iis决定是否调用ISAPI过滤器,ISAPI过滤器是一个标准com组件,负责处理iis不能处理的文件,比如(.aspx文件)。
 因为iis本身是不支持动态页面的,所以需要处理动态页面的时候,iis会根据 配置的ISAPI过滤器,决定该调用哪个 处理程序。如果没有对应的处理程序,iis会原封不动的返回页面的html代码给brower
6。如果是.aspx文件(也可以是其他扩展名,.aspx只是iis默认的asp.net页面),iis则调用asp.net处理进程
7。asp.net处理进程 根据.aspx页面配置的 后台代码类,调用相应编译好的类,完成后台代码处理,然后生产html文件
8。html页面生成完成后,iis 生成http头信息
9。iis生产http包,包括http头+html,传给相应 brower
10。brower解析http之后,根据html文件,找出引用文件,比如.JS,.CSS文件,向server请求下载这些文件
11。iis获取请求,发送这些文件。
12。brower接受完文件后,解释生产相应页面。显示出来了

//
在asp.net中如果需要处理 对 isapi filter的处理,只需实现ihttpmodule接口。

要实现HttpModule功能需要如下步骤:

1.编写一个类,实现IhttpModule接口

2.实现Init 方法,并且注册需要的方法

3.实现注册的方法

4.实现Dispose方法,如果需要手工为类做一些清除工作,可以添加Dispose方法的实现,但这不是必需的,通常可以不为Dispose方法添加任何代码。

5.Web.config文件中,注册您编写的类

到这里我们还需要了解一个Asp.Net的运行过程:

在图中第二步可以看到当请求开始的时候,马上就进入了HttpModule,如果你自己重写了此方法,则在这里就进入你实现了ihttpmodel的对象了 

HttpModule执行的顺序取决于web.config配置HttpModule的顺序,而HttpModule中事件的执行先后顺序与asp.net运行机制相关,具体执行顺序如下:

BeginRequest
AuthenticateRequest
AuthorizeRequest
ResolveRequestCache
AcquireRequestState
PreRequestHandlerExecute
PostRequestHandlerExecute
ReleaseRequestState
UpdateRequestCache
EndRequest


此外,有三个不确定的顺序:
PreSendRequestHeaders
PreSendRequestContent
Error

举个例子:
如果你在web.config配置了两个HttpModule,分别是HttpModuleA,HttpModuleB

这个事件执行的顺序如下:
HttpModuleA->BeginRequest
HttpModuleB->BeginRequest
HttpModuleA->AuthenticateRequest
HttpModuleB->AuthenticateRequest
HttpModuleA->AuthorizeRequest
HttpModuleB->AuthorizeRequest
...以此类推

posted @ 2006-12-17 15:28  jacktu  阅读(928)  评论(0编辑  收藏  举报