简介:
本篇博文涉及的内容或许会有些晦涩,BlogBoy描述的也不够全面(其实这需要读者自身不断的探索和追究)。不过BlogBoy依然相信,以大家的聪明才智绝对有能力完全无障碍的理解篇幅中涉及的大部分内容。OK,进入正题我们来聊聊WEB,说道WEB我们就不得不提“因特网”(Internet),这个大家都有所闻的网,由全世界众多计算机相互连接而构成的巨大计算机网络。其中,约束或形成因特网的前提条件就是这些计算机需要遵循TCP/IP协议族。因此,要了解WEB、要了解WEB的请求模型,我们就先来了解一下什么是TCP/IP,了解一下为什么建立网络连接需要使用这个协议族。
首先需要明白一点,TCP和IP(注意不是TCP/IP,TCP是传输层的一个协议,而IP是网络层的一个协议,TCP/IP协议包含了TCP和IP协议所在的层)分属于两个层的不同协议,它们共同完成网络连接的部分工作。TCP/IP协议采用的是四层模型(关于计算机网络的更为具体的概念以及OSI七层参考模型等相关知识,如果感到困惑就需要读者自己花时去间补充阅读),也许很多读者在这些概念上会感到疑惑,到底什么是层,层在哪里,为什么要弄明白这些东西!BlogBoy认为:对这些层做一些了解,有助于我们理解基本的网络通讯机制,也能够更好的理解高层应用所蕴含的基层知识,比如邮件、文件上传……这些都是在WEB应用程序中使用十分频繁的功能,了解TCP/IP能够很好帮助我们理解这些应用所蕴含的基本原理。
正文:
首先我们先来了解TCP/IP相关的知识,为什么要了解TCP/IP的层结构,为什么要了解每个层中的各种协议!BlogBoy说过了,因为它们是Internet的基础,也是所有WEB程序的基础。
- TCP/IP:
1、网络接口层:定义物理设备的各种需求特性,并负责接收IP数据报,并把数据报发送给网络IP层,毫无疑问,它是TCP/IP协议4层模型中的最底层。
2、网络IP层:是IP协议所属层,也是负责计算机之间通信的层,该层既处理来自上层传输层的请求,同时也接受来自接口层的数据报,是数据报的中转地,它具有处理数据报请求,处理输入数据报,处理路径流通和堵塞等问题。
3、传输层:TCP协议和UDP协议的所属层,提供应用程序间的可靠通信。
4、应用层:这个层包含了丰富的面向用户服务,包含我们常见的一些应用程序,如HTTP(超文本传输协议)、POP3(邮局协议,用于接收邮件)、SMTP(简单邮件传输协议,用来控制信件的发送、中转)、FTP(文件传输协议,用于上传下载)、TELNET(远程登录服务)、DNS(域名解析服务,用于URL和IP地址间的互相转换,网站常用)
- HTTP请求响应模型:
HTTP属于TCP/IP协议的应用层,基于该协议,我们每次向浏览器请求一个URL(你可以理解为是分布在远程主机上的资源),都会发送一个HTTP请求,经过DNS转换,相应IP地址的服务器返回一个数据包(该数据包并不直接包含图片、文件、声音、视屏等东西,而是包含对这些东西的URL,也就是说请求的网页的图片或文件越多,请求的次数也会越多,因为每一个URL都会在后续的浏览器处理中一一请求,这也是为什么很多SEO做页面优化的时候,提倡使用CSS精灵、合并文件等优化手段,不过这些都是后话,我们先来了解一下基础!),当页面的请求得到相应并返回给浏览器,一次HTTP请求就结束了(我们拔掉网线,依然可以看到网页的内容并没有消失,而刷新时却会丢失,因为刷新的真实意义是重新发送请求)。
- ASP.NET请求相应模型:
无论是ASP.NET还是ASP、又或者是PHP、JSP页面请求都是HTTP请求的变种,当我们在浏览器地址栏键入一个ASP.NET页面的URL,然后回车,需要经历这样的一个过程。我们来看看一个普通ASP.NET页面的请求和响应的图解说明(看不清可以下载,使用专业的看图软件观看):
对于上图,读者暂时需要记住以下这几个对象,因为在后期的应用中会经常提到或使用他们:HttpApplication(ASP.NET程序)、HttpContext(请求上下文)、HttpRuntime(HTTP运行时)、HttpRequest(HTTP请求)、HttpResponse(请求相应)、HttpHandler(请求处理程序)。
值得注意的是,上图中并没有提到IIS和ISAPI,不得不说,这是个缺陷,因为脱离IIS讨论ASP.NET的请求和响应有些过于抽象,不过读者可以在互联网中搜索到许多相关的话题,《ASP.NET服务器控件高级编程》一书中也有非常好的描述。
- ASPX页面的生命周期中的一些事件:
1. PreInit:检查IsPostBack属性来确定是不是第一次处理该页、创建或重新创建动态设置主控页、动态设置主控页、动态设置Theme属性、读取或设置配置文件属性
2. Init:在所有控件都已经初始化并且应用所有外观设置后引发,使用该事件来读取和初始化控件属性。
3. InitComplete:由Page对象引发,使用该对象来处理要求完成所有初始化工作的任务;
4. PreLoad:为页和所有控件加载视图状态,然后处理Request实例包括的任何回发数据;
5. Load:处理页面加载引发的事件;
8. PreRender:在呈现页内容之前发生
9. SaveStateComplete:在该事件发生前,已经对控件的ViewState进行了保存,将忽略对页和控件所做的所有修改。
10. Render:向客户端输出流中写入HTML代码
结语:
为了把握ASP.NET请求的生与死,我们先是介绍了最基础的部分,对,就是Internet及TCP/IP的相关基础,然后我们那最简单的HTTP请求作为切入点,讲解了关于一个URL请求的相关知识,随后我们又紧接着讨论了关于ASP.NET页面请求的模型,该模型与普通HTTP模型稍有不同,因为ASP.NET的页面也是面向对象的,而且IIS解析ASP.NET需要借助ISAPI的相关进程的帮助,最后我们还列举了一个ASP.NET页面的事件列表及主要用途。
也许有读者会和BlogBoy一样,起初认为这些内容无关紧要,而且这些内容掌握起来视乎比较棘手,不要紧,凡事都有个过程,还请大家稍安勿燥,写完这篇,我们就基本结束了漫长的基础铺垫的过程,用了4篇文章才勉强讲完,接下来的文章将会侧重于实战和技巧,敬请期待!最后还是得啰嗦一句,金无足赤人无完人,觉得写得还可以的地方借鉴一下,顶一下,不好的地方请自己过滤一下,恩,就说到这,最后(真正的!)祝愿都能活出属于自己的精彩!