首先,客户端根据某资源的URL向WebServer提出请求,WebServer的HTTPDaemon(守护进程)将此请求的参数通过标准输入stdin和环境变量(EnvironmentVariable)传递给指定的CGI程序,并启动此应用程序进行处理,处理结果通过标准输出stdout返回给HTTPDaemon进程,再由HTTPDaemon进程返回给客户端,由浏览器负责解释执行,将最终结果显示在用户面前。实现WWW的通信协议是HTTP(HypertextTransferProtocol,超文本传输协议),它定义了HTTP的通信交换机制、请求及响应消息的格式等;HTML(HypertextMarkupLanguage,超文本标注语言)用来描述WWW上发布的信息,浏览器通过解释执行HTML文件显示出图文并茂的WWW信息,向用户提供良好的信息查询界面;CGI负责调用相应的处理程序,并返回处理结果。本文将从HTTP的通信交换机制和CGI的工作原理入手,对WWW的基础技术进行较详细的介绍,以帮助读者从本质上更深入地理解WWW的一切行为和特征。
HTTP的通信交换机制
WWW要实现诸多目标,其中最基本的四项包括:*分布式信息系统;*对多重协议提供一个统一通用的接口;*对超媒体支持;*可扩充性,能够支持所有的数据格式。
HTTP之前的其他协议都不能完全实现上述要求,因而HTTP就应运而生了。HTTP规范表明,HTTP协议是一种根据明确性和速度要求,为建立分布式协作超媒体信息系统而设计的协议,它是一种简单的、无状态的、面向对象的协议,可用于多种任务,如名字服务器和分布式对象管理。HTTP常常在某种程度上引起人们的误解,仿佛HTTP只能传输超文本,其实不然,你可以用它传输各种对象,而不必考虑其数据类型。
一、HTTP的特点
HTTP设计得简单而灵活,它是无状态和"无连接"的,基于Client/Server模式并且支持元信息和内容类型标识。它具有六个重要的特点:
1.以Client/Server模型为基础
HTTP支持客户与服务器之间通信及相互传送数据,一个服务器可以为分布在世界各地的许多客户服务。
2.简易性
HTTP被设计成一个非常简单的协议,使得Web服务器能高效地处理大量请求,客户机要连接到服务器,只需发送请求方式和URL路径等少量信息。HTTP规范定义了七种请求方式,最常用的有三种:GET、HEAD和POST。每一种请求方式都允许客户以不同类型的消息与Web服务器进行通信,Web服务器也因此可以是简单小巧的程序。由于HTTP协议简单,HTTP的通信与FTP、Telnet等协议的通信相比,速度快而且开销小。
3.灵活性与内容-类型(content-type)标识
HTTP允许任意类型数据的传送,因此可以利用HTTP传送任何类型的对象,并让客户程序能够恰当地处理它们,内容-类型标识指示了所传输数据的类型。打个比方,如果数据是罐头,内容-类型标识就是罐头上的标签。
4."无连接"性
5.无状态性
HTTP是无状态的协议,这既是优点也是缺点。一方面,由于缺少状态使得HTTP累赘少,系统运行效率高,服务器应答快;另一方面,由于没有状态,协议对事务处理没有记忆能力,若后续事务处理需要有关前面处理的信息,那么这些信息必须在协议外面保存;另外,缺少状态意味着所需的前面信息必须重现,导致每次连接需要传送较多的信息。
6.元信息(metainformation)
收到数据的浏览器可以根据元信息确定服务器发来的是什么内容,预料有多少数据,确知是否接收到完整的数据,以及发送过程中是否有错,这样客户就可以知道传输对象的类型。元信息被定义为"关于信息的信息",元信息允许服务器提供所发送数据的信息,例如,HTTP可以提供所发送的对象的语言和类型,也可以用元信息来实现有条件请求和报告事务完成。元信息的引入使得HTTP协议所能做的工作更多了。
二、HTTP的通信交换过程
HTTP通信建立在TCP/IP连接之上,缺省的TCP端口号是80,但也可以使用其他端口号。图2所示的是一个HTTP服务器在端口80上接受来自多个远程客户连接时的情形。Web服务器运行着一个守护进程(HTTPDaemon),它始终在端口80监听着来自远端客户的请求。当一个请求发来时,它就会产生一个子进程来处理当前请求,守护进程继续以后台方式运行,在端口80继续监听来自远端的连接请求。
图2
HTTP通信中客户提出请求应该带上全部必要的信息,客户机和服务器之间不能对不明确的问题进行磋商。一旦客户提出请求,服务器感到信息不够时没有办法要求客户给出进一步信息。客户与服务器通信流程图如图3所示。
图3
三、HTTP的请求和响应消息格式
在WWW信息的传递过程中,客户端向服务器按照特定的格式发出请求消息,服务器端处理此请求,并将结果按照特定的格式作为响应返回给客户。HTTP的消息格式与MIME相似。
1.请求的格式
方法URIHTTP版本号首部(回车换行)实体──主体
2.响应的消息格式
HTTP-VersionStatus-CodeReason-Phrase首部(空行)Entity-Body
状态码表示服务器是否成功地满足了客户的请求,状态码由一个三位整数和解释状态码含义的正文短语组成。状态码以1、2、3、4、5开头,在HTTP/1.1中,1类状态码表示的是信息性(informational)提示;2类状态码表示成功--服务器理解客户的请求,并且毫无困难地给出了响应;3类码表示发生了重定向--服务器理解请求并能够取得资源,但发现资源不在指定的位置而在其他地方;4类码表示客户出错;5类码表示服务器出错。所有这些状态码中,需要熟悉的只有几个。经历最多的是200(OK),不过也许会碰到400(Badrequest)和404(Notfound),偶尔也有500(Internalservererror)。如果想把服务器重定向到新的位置,而不是返回一个仅仅链接到对象新位置的文档时,301(MovedPermanently)和302(Movedtemporarily)将特别有用。响应消息的首部域中,通常会指明所传输数据的编码压缩机制、服务器端软件等。实体主体是所传输的数据,由于HTTP对于以任意格式传输文档的自由度很大,所以它可以是图形、音频、视频文件等多媒体对象,只需在首部域中标明其类型即可。对任意格式传输数据的完全开放性,正是HTTP和Web所提供的最重要的优越性。
CGI的工作原理
一、CGI的工作原理
CGI(CommonGatewayInterface)是外部应用程序与Web服务器交互的一个标准接口。CGI应用程序可以完成客户端与服务器的交互操作,它打破了服务器软件的局限性,允许用户根据需要采用各种语言去实现无法用HTTP、HTML实现的功能,给WWW提供了更为广阔的应用空间。例如,一个能够访问外部数据库的CGI程序可以使客户端用户通过Web服务器进行数据库的查询。同时,CGI也为如何在不同的平台之间进行沟通提供了范例。CGI工作的主要流程是:1.一个用户请求激活一个CGI应用程序;2.CGI应用程序将交互主页中用户输入的信息提取出来;3.将用户输入的信息传给服务器主机应用程序(如数据库查询);4.将服务器处理结果通过HTML文件返回给用户;5.CGI进程结束。一个CGI程序可以实时产生动态的HTML文件,它能根据用户的需求输出动态信息,将数据库服务器中的信息作为数据源对外提供服务,将WWW服务和数据库服务结合起来。如图4所示,客户端向Web服务器提出请求,Web服务器运行对应的CGI程序,CGI程序向数据库服务器提出请求,数据库服务器将查询结果返回Web服务器,Web服务器再将查询结果返回客户端,一个查询请示结束。
图4
二、ISAPI的工作原理及其性能
ISAPI即InternetServerApplicationProgramInterface,是微软提供的一套面向Internet服务的API接口,它能实现CGI提供的全部功能,并在此基础上进行了扩展,例如提供了过滤器应用程序接口等。ISAPI的工作原理和CGI大体上是相同的,都是通过交互式主页取得用户输入信息,然后交服务器后台处理(如图5所示)。但是二者在实现机制上大相径庭。ISAPI与CGI最大的区别在于:在ISAPI下建立的应用程序都是以动态链接库的形式存在的;而CGI的应用程序一般都是可执行程序。