A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yllogininbh 中级黑马   /  2014-6-3 10:06  /  1923 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 yllogininbh 于 2014-6-5 20:00 编辑

如题请求过程

2 个回复

倒序浏览
1、用户通过客户端浏览器请求页面,页面第一次运行。
2、Web服务器上的ASP.NET对请求的页面进行处理,翻译成HTML和Javascript。
3、页面将标记动态呈现到浏览器,浏览器对标记进行解析并显示。
4、用户键入信息或从可选项中进行选择,或者单击按钮。
5、页面发送到Web服务器,在ASP.NET中称此为“回发”或“回传”。
6、服务器执行后台代码指定的操作。
7、服务器将执行操作后的页面以HTML或XHTML标记的形式发送到客户端浏览器。

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
浏览器与服务器
1.浏览器发送get或者post请求,传送数据包到服务器,来请求一个页面.
2.服务器的内核模式一直存在一个程序在监听80端口,这个程序就是Http.sys.这个程序是在内核模式下运行的,驱动级别,也就是说,这个程序可以直接操作系统的硬件设备.
3.Http.sys会再注册表中查询是否有程序在监听这个80端口,如果有程序在监听,并且收到了对该端口的请求报文,就把这个报文请求转给相对应的应用程序进程.这时候由内核模式进入用户模式.inetinfo.exe
4.(已经在用户模式)inetinfo.exe这个进程,IIS根据浏览器发来的请求报文的资源后缀以及自身的配置信息,来判断用户请求的是哪类资源,动态的?还是静态的.并且无论动态或者静态,都会启动w3wp.exe这个工作者进程.(此时处于非托管模式)inetinfo.exe这个进程来判断好请求的资源是动态的还是静态的,如果是静态的,w3wp.exe这个进程就去磁盘上找到这个资源,并且返回给浏览器.如果是动态的,在w3wp.exe中调用aspnet_isapi.dll这个程序.(该程序集一直寄宿在w3wp.exe进程之中),并且由这个程序作为一个桥梁,调用.net的ISAPIRuntime运行时(此时已经处于托管模式).,该ISAPIRuntime运行时会执行.net页面请求,并且返回给浏览器.

???????????????????
那么ISAPIRuntime这个运行时,具体是怎么样去创建这个页面,并且以响应报文的形式返回给浏览器的呢?
(1)在ISAPIRuntime中,调用了ProcessRequest(这个方法.)并且将数据报的句柄作为参数,传给该方法.
(2)在ISAPIRuntime的ProcessRequest方法中,声明一个ISAPIWorkerRequest 变量,叫做wr.然后根据这个数据报的句柄编号.利用这个方法来实例化wr对象wr=ISAPIWorkerRequest.CreateWorkerRequest(ecb, useOOP);
这个HttpWorkerRequest对象第一次,原始的封装了数据报
(3)现在还是在在ISAPIRuntime的ProcessRequest方法中.然后在该方法中,调用了HttpRuntime.ProcessRequestNoDemand(wr)这个方法,把封装了数据报的wr作为参数传入,这里有一个 RequestQueue队列,,所有的wr都会先存放在这个队列中.每次从这个队列中拿一个wr,作为参数调用HttpRuntime.ProcessRequestNow(wr);这个方法调用了ProcessRequestInternal(wr)这个方法
在这个方法中,创建了了一个HttpContext对象,这里把经过原始简单封装了数据报的wr作为参数,第二次的封装成了一个HttpContext对象.
(4)然后再HttpRuntime.ProcessRequestNow(wr)中,利用工厂来创建IHttpHandler(应用程序实例)HttpAppliction 对象,以这个context作为参数.
(5)这时候创建出来的 对象,再以Context为参数,调用  HttpAppliction 的ProcessRequest(context).这时候开始进入请求管道,然后执行管道中的19个事件23个步骤.(这里在反编译的时候是IHttpHandler这个接口,并没有显示是HttpApplication对象,但是查看HttpApplication是继承了IHttpHandler,这个接口的,所以可以直接调用ProcessRequest(context)这个方法而进入管道)




回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马