日期:2014-06-10  浏览次数:20569 次

1. 协议小结:HTTP协议与TCP/IP协议

    现代Web应用开发的基础是HTTP协议,那么HTTP协议与我们熟知的TCP/IP协议有什么关系呢?

    这个要从网络通信模型说起,简单的说,计算机通信就像两个人在互相交流,怎样才能互相听懂呢?很简单,就是使用一致的语言和表达方式。

    计算机之间通信的语言就是网络协议。网络协议是网络上所有设备(网络服务器、计算机及交换机、路由器、防火墙等)之间通信规则的集合,它规定了通信时信息必须采用的格式和这些格式的意义。大多数网络都采用分层的体系结构,比如传统的开放式系统互连参考模型(OSI)中,定义了7个层次的模型,从底到上依次为:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。每一层都建立在它的下层之上,向它的上一层提供一定的服务,而把如何实现这一服务的细节对上一层加以屏蔽。一台设备上的第 n层与另一台设备上的第n层进行通信的规则就是第n层协议。在网络的各层中存在着许多协议,接收方和发送方同层的协议必须一致,否则一方将无法识别另一方发出的信息。网络协议使网络上各种设备能够相互交换信息。常见的协议有:TCP/IP协议、IPX/SPX协议、NetBEUI协议等。

    常见的3种协议各有不同特点,也就导致了有不同的适用范围。最适合使用在Internet上的就是TCP/IP 协议。该协议系统并没有使用传统的7层,而是提出了简化的4层模型,从底到上依次为:网络接口层,网络层,传输层,应用层。同样的,只有为每一层定义好交流的协议,网络中的计算机之间才能互相通信。例如:网络层的IP协义,传输层的FTP,UDP,TCP协议等,应用层的HTTP,SMTP,POP3,FTP,TELNET等协议。

    HTTP协议是一个叫超文本传输协议的应用层协议,是提供网页服务的协议。没有HTTP 协议是不能浏览网页的,但是其他的像邮件服务(只要协议在)都还是正常的。

2. 请求过程:HTTP请求

    我们在浏览器中访问网站,与服务器进行交互都是通过HTTP请求发出的。当你点击一个连接时,浏览器首先找到站点的IP地址(通过DNS来实现)。在找到IP地址后建立TCP连接,连接建立后我们就可以发送请求了。每个交互都会转化成相应的HTTP请求,最常用的如GET(第一次请求页面),HEAD,POST(附带参数,请求页面),PUT等等。转化后的HTTP请求是有一定格式的,这个有兴趣的可以参考相应的HTTP请求格式说明。

    服务器处理完请求后,会返回HTTP响应给客户端并断开连接,这个响应同样包含了很多的信息。浏览器收到响应以后,解析该响应并显示在浏览器中。响应内容中最有用的就是响应的状态(数字表示,如200表示成功,404表示没找到页面等)和返回请求的各种文本(如页面HTML,CSS文件,JavaScript文件等等)。

3. HTML语言

    浏览器从服务器获得到HTML后,就负责解释并展现HTML表示的内容。HTML代表超文本标记语言,其最初的目的就是格式化文本,方便浏览器解释,并展示给客户端。但是随着网络的发展,网络传输和显示的内容也日渐丰富,页面不再只包括静态的图片和文字,而是包括了列表,选项,交互等内容。扩充后的HTML提供了更为丰富的标签。其中最突出的就是<form>表单,它是应用程序与用户进行交互的前提。<form>表单提示浏览器,这个标签与</form>标签之间的内容会返回给服务器。表单的数据会被“投递”给服务器处理,这个过程就是回发。

    典型的HTTP请求通常就是先进行GET获取,再进行POST投递 - 前者获取最初的文档,后者用于在必要的时候将数据返回给服务器,进行更为复杂的计算和处理。

    直接使用HTML开发无疑是很麻烦的,为了更好的完成现代动态Web开发,不同的公司提供了不同的运行环境和开发工具,微软提供的就是ASP.NET。它提供了很多集成的对象,简化了开发的难度。但是还是有很多的问题不能很好的解决。比如HTTP是无状态的,如何保持页面POST前后的状态,实在是一个困难的问题。

4. Web开发思想

    从上面的分析我们可以看到,归根结底,Web开发无非是要处理两大问题:

    (1). 在无连接的HTTP协议上通过HTML管理用户的界面

    (2). 在无状态的HTTP协议上管理应用程序的状态。

    虽然有像ASP这样的框架出现了,使得Web的开发更加简单,但是开发者仍然要自行开发许多的“标准”功能,例如安全系统,管理UI状态,数据访问等等。所有这一切促使了更高级,更智能的像ASP.NET这样的编程框架的产生。

    了解了这个基本问题,以及让开发者开发更快速,更简单这样最直接的目的,我们可以想象,具体的开发框架必定会继续向前发展,不断推陈出新,并提供更加完整,更加智能的功能。

    当然了,HTML5中WebSocket的出现已经引发了有连接的状态,这个在前面的文章中已经提及了,就不多说了。