1.WWW简介
在现在的网络体系结构中,最底层的物理层,自下而上分别是数据链路层,网络层和传输层。数据链路层的规范最常见的是以太网,网络层是IP,传输层是TCP和UDP协议,最上面一层是应用层。应用层的协议包括FTP,HTTP等等。下面的这个图就说明了当前网络的架构(在这个图中,对于物理层和数据链路层的抽象程度比较高,但是没有关系,我们主要的目标是在L3,L4和L5上):
应用层和传输层之间的接口是SOCKET。在本文中,我们主要将精力放在HTTP中。我们通常所讲的WWW(World Wide Web)的含义是指一种采用Client/Server架构的分布式系统。Client通过浏览器(Browser)来访问Server。Server则拥有大量的文件供Client,这些文件采用Web Page的方式呈现给Client。下图所示就是client和server之间通信的方式。
在这里简要的提一下超文本和超媒体的概念,超文本(HyperText)和HyperMedia是指在文件中存在指向其他文件的连接的文件。接下来在简要的介绍一个我们通常所使用的浏览器的结构。浏览器通常包括protocols、controler以及interpreters三个组成部分。protocols是指浏览器支持的协议,controller顾名思义是控制端,比如你按下了一个按钮,interpreters是指浏览器对来自服务器的文件的解释器,现在最常用的是HTML,JavaScript以及Java。下图就是浏览器通常采用的架构。
我们通常在浏览器的命令行敲进的东西(比如www.xiaonei.com)叫做URL。URL是获取服务器上资源的指针,通过URL就可以定位到服务器上的资源。URL通常采用以下的格式
protocol是指的获取资源采用的协议,比如TELNET, FTP HTTP等。host是指服务器的域名(请查阅DNS),端口是指服务器提供某项服务器指定的访问端口比如80,path是指资源在服务器上的路径。port是可选的。
存储在服务器上的文件分为三类,静态文件(static document)、动态文件(Dynamic documents)以及主动文件(Active documents)。静态文件是指的文件是“不变的”,例如某一张图片,静态文件通过HTML,XML,XHTML以及XLS等语言描述。动态文件时服务器在接收客户端的请求参数之后动态生成的。假如动态文件的所有部分都重新生产则是低效率的,因为文件的,某些部分是静态的。于是一些script语言变诞生了,scripts嵌入在HTML等静态文件中,服务器只需要运行这些scripts片段就可以了。最常用的scripts包括Hypertext Preprocessor (PHP), which uses the Perl language; Java Server Pages (JSP), which uses the Java language for scripting; Active Server Pages (ASP), a Microsoft product。主动文件是指有时候客户端一侧需要运行一些程序来达到某些目的(比如非常不错的画面),则服务器在返回给客户端的HTML文件中可以嵌入Java Applet或者JavaScript的片段。然后有客户端的浏览器运行则效果便产生了。
2. HTTP协议
HTTP协议是使用TCP的一种协议,在服务器端通过80端口传输。HTTP消息分为Request和Response两种。HTTP 通信的方式:
其中Request消息的格式是:
第一行成为Request line,包括Method、空格sp、访问server的URL、HTTP版本,以及回车(CR)和换行(FL)组成。其中Method字段比较重要,其具体含义如下图所示:
个人认为该表格中的PUT错了,应该是sends a document from the client to server,具体参考件HTTP RFC。接下来就是HTTP的header lines了:
最后就是HTTP body了,里面才是数据。数据的大小可以通过IP包的长度减去ip头的长度(通常20字节)以及TCP头长度以及HTTP头长度来获得。
HTTP Response的格式和HTTP Request类似。如下图所示:
Status line 包括HTTP版本号 空格 状态字 空格 Phrase是对状态字Status的文本解释。然后是回车和换行。
Status code以及Phrase如下图所示:
HTTP Response header names 及其意义如图所示:
最后是HTTP Response 的body,其大小可以采用相同的方式获得。
参考文献
[1] Hypertext Transfer Protocol-HTTP1.1:http://www.w3.org/Protocols/rfc2616/rfc2616.html
[2] TCP/IP Protocol Suite by Foruzan