您的位置:首页 > 其它

浏览器跟服务器交互的整体流程(个人理解,如有不同见解,愿意分享)

2011-09-04 19:57 696 查看
把整个运行机制综合起来.
一。浏览器发送静态页面请求(服务器判断是否存在缓存Cache:见附1)。
1.服务器创建监听套接字(strock)建立与浏览器的连接。建立连接后,监听套接字断开。
2.浏览器通过连接通道向服务器发送请求报文,服务器再创建通信监听套接字。负责监听浏览器发送过来的请求报文。
2.1.浏览器发送过来的html.静态请求。服务器通过ExcuteSataticPage()方法读取静态页面内容,并产生响应报文,返回给浏览器。
2.2.浏览器发送过的图片请求。服务器通过ExcuteImg()方法读取图片内容,并产生响应报文返回浏览器。
2.3.浏览器发送过来的动态页面请求。IIS发现无法处理该请求然后把该请求文件传递给服务器扩展程序中一个叫ASP.NET_ISAPI.DLL的程序。可扩展程序又将请求交给网站程序。
二。浏览器发送动态页面请求。(服务器判断是否存在缓存Cache:见附1)
1.网站程序接受服务器可扩展程序ASP.NET_ISAPI.DLL程序递交过来的请求。
2.HttpRuntime类开始执行。
2.1把浏览器发送过来的请求报文数据封装到HttpWorkerRequest类对象的属性中
2.2HttpRuntime类创建一个HttpContex(当前请求的上下文环境)对象。创建最主要的两个对象:HttpResponse,HttpRequest。其中HttpResponse对象作用是把服务器处理后的响应报文封装起来发送给浏览器TextWrite;HttpRequest主要包含了所有的请求信息,这些数据在HttpWorkerRequest类里面访问,包含属性:Querystring(“get”方式传递给服务器的数据),Form(“post”方式传递给服务器的数据);动态页面里面有可能包括html控件,html(runat=server)控件,服务器控件。后面两个控件都会生成页面类。前面的控件会放到LiteralControl.而且后面两个控件的会有一个ASP.NET特有的VIEWSTATE的东东。用来保存控件的所有属性。这些控件对象都会存放在Controls集合中
2.3HttpApplication(伟大的信息处理即将开始),每一个请求都会创建一个HttpApplication类。它主要执行19个委托Delegate类型指向的方法。也可以叫做一个过滤通道。
3.HttpApplication(伟大的信息处理开始了)
3.1 (19个方法)开始Star ,结束End 。
3.2第八个方法:创建页面类的对象并转成IHttpHandler接口对象。为什么要用接口呢?因为根据浏览器发送过来请求分别要处理不同的页面,通过接口可以实现处理不同的页面。
3.3第九个方法到第11个方法之间:会判断一下服务器是否有SessionId,如果有就通过键值对的方法用SessionId访问session对象,并且付给页面对象的Seeion属性。如果没有SessionId则不执行这个方法。
3.4第11个方法到第12个方法之间:执行了页面类对象的ProcessRequest()方法。在这个方法里面是整个页面生命周期。
3.4.1 _buildControlTree()方法来创建页面控件树。第一个方法LoadState():它会判断请求报文里的隐藏域(ASP.NET特有的)viewStatel;将用户添加的服务器控件属性添加到viewsatae属性里面。
3.4.2 PageLoad()方法读取程序员自己写的C#代码,也就是用户添加的服务器控件属性。
3.4.3.savestate()方法将所有控件的属性保存在VIEWSTATE属性中。
3.4.4调用Render()生成HTML代码返回给浏览器,标志着页面生命周期结束。
四。浏览器处理服务器发送的响应报文,通过浏览器自己的解析生成页面。
附1.浏览器向服务器发送请求,服务器会先判断服务器内存中是否存在缓存,如果没有cache,正常执行。如果有缓存Cache浏览器会调用页面缓存,服务器缓存。

以上内容是本人在北京传智播客教育培训公司学习,由老大栋哥激情引导,传授ASP。net技术后的个人见解,所学尚浅,敬请同道的大侠们多多指点!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐