《WebGIS开发实践手册》1.1.3 WWW的工作协议

我们已经知道,WWW是建立在HTTP(Hyper Text Transfer Protocol,超本文传输协议)上的一种网络应用,而HTTP是一种客户端和服务器端(Client/Server)模式的请求/响应(Request/Response)标准,设计HTTP的初衷是为了提供一种发布和接收超文本的方法,所谓的超文本,就是我们最熟悉不过的HTML标记文件。

在HTTP协议中,客户端与服务器端的通讯过程包含4个步骤:

Ø 先建立客户端与服务器端的TCP连接;

Ø 客户端向服务器端的指定端口发送请求消息;

Ø 服务器端向客户端返回相响应的消息;

Ø 关闭TCP连接。

clip_image002

图 1‑7 一个HTTP会话过程

下面是一个典型的HTTP1.1请求消息:

GET / HTTP/1.1

Accept: */*

Accept-Language: zh-cn

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727)

Host: www.google.cn

Connection: Keep-Alive

请求信息的第一行规定了HTTP服务器使用的方法,本请求采用GET方法,它告诉服务器我们要请求某个资源,这一行也规定了使用HTTP/1.1版协议。其他几个消息头向Web服务器详细说明了浏览器的一些信息,如可能接收的信息类型和编码等,它们包括:

Ø Accept告诉服务器要求接收什么类型的MIME(Multipurpose Internet Mail Extensions,多功能Internet 邮件扩充服务),在该例子里,*/*表示可以接收任何类型的MIME;

Ø Accept-Language告诉服务器本浏览器使用的语言。此后服务器可能利用这些信息对返回的内容进行个性化处理。在本例里,浏览器说明了采用中文(zh-cn)。

Ø Accept-Encoding告诉服务器,返回给浏览器的内容是否需要编码。在本例里,它可以接受采用gzip或deflate方法压缩的文档。它们是一些数据压缩方法,需要在客户端进行解压。

HTTP服务器在该端口接到请求后,给予相应的响应Response信息,并关闭TCP连接。下面是一个典型的HTTP1.1响应消息:

HTTP/1.1 200 OK

Cache-Control: private, max-age=0

Date: Thu, 11 Dec 2008 13:50:45 GMT

Expires: -1

Content-Type: text/html; charset=UTF-8

Content-Encoding: gzip

Server: gws

Transfer-Encoding: chunked

//资源内容省略

响应的第一句“200 OK”表示响应正常,通常地,我们会经常遇到诸如“403 禁止”或“404未找到”之类的响应,那是Response在报告自己的状态。这样,一个会话(Session)过程就完成了。HTTP会话过程非常简单,请求需要什么,服务器就提供什么。

HTTP协议有多个版本。在HTTP1.0版中,完成一个请求/响应过程后,TCP连接就被释放,一个TCP连接只支持一个请求/响应过程,它在通讯交互中需要频繁地建立TCP连接。但HTTP1.1就开始支持持久性连接,这使得一个TCP连接能够支持多个请求/响应过程,这个技术称为“流水线”,目前我们普遍使用的HTTP版本为HTTP1.1[1]

上面HTTP协议的请求中使用了GET类型的请求方法,HTTP协议中定义了其它7种请求方法,即HEAD、GET、POST、PUT、DELETE、TRACE和OPTIONS,常用的有下面三种:

Ø HEAD要求响应与GET请求的响应一样,但是没有的响应体。

Ø GET用于信息获取,它将数据通过URL进行提交,并使用一个“?”字符表示URL地址与数据之间的分隔符;GET提交的数据是以“名称/值”形式出现的,并以“&”字符来区分不同的名称/值,其传递的值以明文形式出现,但它提交的数据最多只有1024字节。
GET请求在地址栏中类似http://a.com/news.aspx?id=01&category=02,其含义是:使用http协议,访问a.com站点Web服务器中的news.aspx页面,向该页面传输两个参数,即id为01和category为02;

Ø POST向指定的资源提交需要处理的数据,数据不会出现在地址栏中,而是包含在HTTP主体中被提交,更重要的是POST方式没有GET的1024字节大小限制,对于SOAP这样包含了大量XML数据的规范,就必须使用POST方式提交;

HTTP协议虽然位于TCP/IP协议之上,这也并不是必须的,TCP/IP协议只是给HTTP提供了一个成熟稳定的传输通道而已。

HTTP协议简单灵活,可靠性高,而且能传输任意类型的数据;同时,HTTP协议传输的数据与平台无关,只要操作系统支持HTTP协议,Windows平台上的Internet Explorer浏览器访问其它OS上Web服务器中的HTML页面就没有任何问题。我们开发的各种WebGIS系统,就是建立在HTTP协议之上的一种特殊的Web应用程序。

小知识:无状态的HTTP协议

我们常说,HTTP是一种无状态的协议(stateless protocol),即在HTTP的请求/响应过程中,无论是客户端还是服务器,都不会记录这个过程的任何信息,每次请求/响应都是相对独立的,即使是某个客户端在几秒钟内再次请求同一个请求,服务器也不会记得哪个客户端曾经连接过它。

对于静态的HTML交互,状态是没有什么意义的,我们访问一个WWW页面,服务器便将静态的文本返回给我们。但在需要交互的WWW应用中,状态就成为一个很重要的问题,比如登录电子邮箱,是基于用户名和密码的,这要求服务器记住是谁在登录,登录是否过期等问题;在WebGIS中,如果要返回上一次地图页面,服务器必须记住上一次的视图范围数据。

从本质上讲,这种无状态是因为整个操作过程是在不同计算机的不同进程之中,造成变量无法被记录。于是,两种用于保持HTTP连接状态的技术就应运而生了,一个是Cookie[2],另一个则是Session。Cookie和Session通过不同的方式保持了客户端与服务器之间交互的连续性,从而保证了一些长事务交互活动实现的可能。


[1] HTTP1.1可参考http://www.cnpaf.net/Class/HTTP/200707/20984.html

[2] 关于Cookie可以参见http://zh.wikipedia.org/w/index.php?title=Cookie&variant=zh-cn

posted on 2009-09-07 11:22  浩淼  阅读(696)  评论(0编辑  收藏  举报

导航