公共网关界面CGI

公共网关界面CGI目前在实际应用中最广,本文介绍了客户机、服务器和CGI Script之间如何进行通信和共享信息,了解这些内容有助于用户编写自己的CGI Script。

公共网关界面CGI是一种在服务器与外部Script(脚本程序)或程序之间进行交互的方法。该界面确切地说是一个网关,它通过从服务器上接收信息,并创建一个子过程,用于为CGI Script处理或存储这部分信息。

CGI能使用户在自己的Web页面上添加一些程序,这样访问者就能与该Web页面进行交互检索实时信息,与其它访问者进行交互等。

利用CGI用户可以向网站的访问者提供一种方法以访问你的数据库、存储信息和执行一些外部程序(例如发送电子邮件等)。CGI有助于将Web页面从简单 地提供静态信息转变为提供实时或动态信息。在没有CGI时,我们只能将网页放到Web上供访问者阅读。对于网页的改变,通常只能采用手工方法来重写每个语 句的HTML代码,以保证信息的及时更新。有了CGI,就可以通过创建Script来与数据库进行交互,向用户及时提供任何一个更新阶段的信息,而这些相 对于CGI为你或单位所能提供的帮助而言只不过是一个小应用。

那么,CGI是如何在客户机与服务器之间进行工作的?

CGI如何工作

服务器根据客户机在进行请求时所采用的方法,收集由客户机提供的信息,并将该部分信息发送给CGI Script。然后CGI Script进行信息处理并将结果返回服务器。服务器再对信息进行分析,最后将结果发送给客户机,流程如图1。


客户机通过使用GET、POST或HEAD方法来调用Script。而将信息提供给Script的途径则取决于所使用的方法。通常GET和POST方法,在CGI Script中比HEAD方法要用得多一些。

1、环境变量

在提出请求或调用CGI Script时,客户机和服务器要将部分信息保存在某些环境变量中,而服务器和Script都能够使用这些变量。环境变量分为三类:服务器信息、客户机信息和Script信息,这里简要地说明每类变量的大致功能和作用。

服务器信息变量:服务器提供了在用户的Script中所要用到的关于服务器本身的信息。这部分信息包括有服务器软件和所用软件的版本号、服务器名称、服务器采用的协议和协议的版本号以及服务器端口号和网关界面。

客户机信息变量:同服务器一样,客户机也要提供一些自身的信息。客户机变量能够提供有关访问本网站的访问者的信息,如访问者所使用的Web浏览器名称、 访问者来自何处等。该信息中还可能包括访问者的IP地址、访问者所在网站的域名,以及当访问的页面被口令保护时要求用名和口令。

Script信息变量:在表单(Form)和Script中也要由变量来表示信息。例如在你的表单中含有由服务器接收到的信息,服务器将这些信息保存到环 境变量中,这样你的CGI Script就可以方便地使用这些信息了。在Script信息变量中,常见的变量有QUERY-STRING(含有访问者输入的信息)、CONTENT- TYPE(告知服务器接收哪一类的信息)、CONTENET-LENGTH(用户输入信息的长度)等。

2、命令行方式

在CGI Script中允许使用命令行方式,而只有带有〈ISINDEX〉属性进行查询(query)才能使用命令行。在一个查询串中,当使用不带等号(=)的〈ISIN DEX〉标签时,服务器允许你对系统发送一个查询命令,然后返回查询结果。

在制定HTTP规则时,该方法被认为是安全的,但在以后的使用中出现了一些问题,例如有关获得对本网站根目录的访问权限问题。因此,用户最好在必要时才使用该方法。

3、STDIN和STDOUT

每个程序都有STDIN(标准输入)和STDOUT(标准输出)。CGI的STDIN是服务器的STDOUT。CGI程序先对某信息进行处理,然后将结 果送到STDOUT。服务器通过它的STDIN接收到结果,再通过它的STDOUT把结果发送给客户机, 这个流程如图2所示。

4、GET方法

在进行简单查询时,当查询串长度小于255个字符,GET方法是一种最常用的方法。具体使用GET方法是将某个查询串放到环境变量QUERY- STRING中,该变量长度限制在255个字符内,包括空格。在查询中,当“?”标记之后是一个查询串时,服务器便会创建一个环境变量QUERY- STRING,并把该查询串放到该变量中。

5、POST方法

POST方法也可以使用环境变量,但该方法向CGI Script发送的多数信息都是通过STDIN和STDOUT。

 
在POST方法应用中,当访问者使用表单向服务器发送信息时,信息先被送到服务器的STDOUT,继而进入CGI Script的STDIN。Script必然对信息进行解码和处理,然后将结果送至STDOUT。POST方法在CGI编程中是最常使用方法。

CGI Script 使用的语言

可以使用任何一种编程语言来编写CGI Script。作为用户来说,采用哪一种变成语言完全取决于编程者的应用方向和对语言的熟悉程度。

Perl:Practical Extraction and Report Language,实用提取与报表语言,可以说它在众多的CGI编程中最流行。Perl语言的语法规则简单,很容易学习,比C语言、Tcl或其他的语言容 易掌握,而且,可以用于UNIX、Windows NT、95、OS 2/Warp 和VMS以及Macintosh 和Amiga。(http://www.perl.com/perl/) 语言:是一种最常使用的编程语言,它在CGI 编程中也发挥得很出色。C语言比Perl难学,但是 C 语言程序运行速度快,并且由于C语言很灵活,因此用户几乎可以做任何事情。C 语言的一个缺点是C代码难以调试,在C程序中稍有任何改动,都要对源程序重新进行编译。因此,在C编程时,对于要求简单并且迅速的Script来说,经常 改动是麻烦的问题。

UNIX Shell:提供了用于创建简单、运行快的CGI Script的一种方法。当然,你也可以使用shell来创建相当复杂的Script,但是那样做所付出的代价非常大。而shell对于编写一些小的 Script来说是非常有效的。如果已经熟悉了UNIX,那么UNIX shell能够使你通过使用系统命令来处理查询信息,使创建Script变得十分简单。

TCL 语言: Tool Command Language,工具命令语言主要用于MS-DOS、Macintosh和UNIX系统。如果对C语言熟悉,学习TCL很容易,因为TCL的语法规则类 似于C语言。就编写CGI Script而言,TCL语言还没有像其它语言那样普及,但是它的发展速度却很快。此外,TCL语言的可移植性不是很好,因为它能使用直接的系统调用,而 这些调用往往都是计算机特定的。

Visual Basic 语言:它是创建CGI script的一种优秀语言。该语言易于学习,对初学者来说是一个比较好的选择。在CGI应用中,Visual Basic算是一个较新的语言,但是它在Internet中已经越来越多的被引入到Windows NT和Windows95的Web服务器上。Visual Basic是能够编译的BASIC编程语言,尽管没有C语言运行快,但它有一个非常显著的优点,即它在Microsoft操作系统上非常流行。

Java语言:它能够用来创建一个称为applet(小程序)的程序,浏览器以二进制方式接收到applet并能够执行它,这要求浏览器能够运行applet。

C++:是另外一种可以用来编写CGI Script的语言,C++是一个面向对象的编程语言,通过使用部分的C++源代码可以使CGI的开发变得比较容易和减少冗余。

AppleScript:广泛用在基于Macintosh的Web服务器上。该语言非常容易理解,对于一些小的应用程序来说其功能是足够强的。

CGI的未来

目前的CGI规则中有一些内在的问题,原因是在一个Web服务器上的某个CGI Script是作为一个分离的进程,而非常拥挤的网站可能会超负荷。尽管在Web服务器上,CGI是一种运行外部程序功能最强大的方法,但仍有一些方面需要提高。

一些组织已经开始编写不同的API规则,力图开发出好的方案来解决上面的问题:

FastCGI是另一个很有希望的CGI解决方案,由Open Market开放。FastCGI提供了一种方法,能够提高服务器与外部程序通信的速度,在执行CGI操作时减少服务器上的负担。FastCGI的特点是 与语言无关,与服务器无关。FastCGI的设计能够使它的程序运行在外部服务器上,放宽了对服务器系统的要求,而是主要集中在HTTP请求和执行用户身 份的认证及检查上。(http://www.fastcgi.com)

ILU Requestor的设计也是用于解决相同的问题,即CGI的高负荷和较慢的响应时间问题,尤其是在一个很忙的服务器上。ILU Requestor与具体语言无关,具有可移植和运行速度快的特点。(http://www.w3.org/hypertext/WWW/TR/WD- ilu-requestor)

ISAPI(Internet Server Application Programming Interface)由Process Software和Microsoft公司共同开发,是比较有希望能够取代CGI的API接口,特别是那些基于Windows的Web服务器。ISAPI 设计的基本思想是基于动态链接库DLL,使得后台程序运行速度提高。

留下评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据