CGI的工作原理
CGI是Webserver和外部程序之间的一个接口。
利用CGI程序能够处理从Web上client发送出来的表单和数据。并对此做出相关操作。这样的反应能够是HTML文件、图片、声音、视频等能够在浏览器窗口上出现的不论什么数据。通用网关接口有两个含义。首先它为client用户通过www获取Internet上的其它服务,比如Archie、WAIS、Database等提供了一个接口,尽管不能直接在www上訪问这些服务,可是您能够通过一个CGI程序和Webserver訪问它们。
其次它就是您编写的程序和Webserver间的接口标准。您所编写的处理client有关信息的程序必须遵循这个标准。
那么,CGI是怎样在client的Web浏览器(如Netscape Navigator)和Webserver(如NSCA HTTPd)间工作的呢?
当client的浏览器向Webserver请求一个HTML文件时,server在收到请求后就去寻找这个文件并将找到的文件传送给client。而当client的请求是一个CGI程序时,Webserver将激活client所请求的CGI程序。
此时Webserver所起的作用就好像是client和CGI程序间的中间人。如图所看到的。
CGI程序的工作一般能够分为下面几个步骤。
1.client发出请求
首先,client的浏览器发出一个请求给Webserver。假设这个请求是一个普通的文件(比如HTML文件、GIF或JPEG文件),Webserver就将文件直接传送给client的浏览器。假设这个请求是一个CGI程序或外部应用,Webserver将激活对应的CGI程序。比如:client传送来的请求可能是对一个数据库的检索,此时一个对应的CGI程序将被Webserver激活,这个CGI程序将依据client要求的准则去检索对应的数据库。并通过Webserver将结果传送给client。
2. Webserver激活CGI程序
当Webserver发现client浏览器传送来的请求不是一个普通文件而是一个CGI程序时,Webserver就要激活这个CGI程序并运行它(比方:http://www.example.com/wiki.cgi)。
在这个CGI程序被执行前,Webserver要为该CGI程序设置一些环境变量。这些环境变量被server用来向CGI程序传递一些很重要的信息,比如当前Webserver的状态、谁发出的调用等等。
Webserver为CGI程序所设置的环境变量的使用和正常的环境变量的使用没有不论什么差别。当CGI程序执行结束时,Webserver为它设置的环境变量也随着消失。
每一个被激活的CGI程序都有自己唯一的一组环境变量。其实对于一个非常繁忙的Webserver。可能同一时候会有同一个CGI程序的非常多个进程在执行。这时每一个CGI程序的进程都有自己的执行环境,互不影响。
3. CGI程序对client的请求做出反应
CGI程序通过环境变量或其它途经读取Webserver所提供的client的输入数据并对这些数据进行处理,假设有必要CGI程序还要和一些外部的服务比如Archie、WAIS和Database等发生联系。最后CGI程序将通过Webserver将处理结果传送给client。CGI程序能够依据须要产生各种类型的数据。
4. Webserver将CGI程序的处理结果传送给client
Webserver收到了CGI程序的处理结果后将对CGI程序的输出进行检查,如有必要,将为CCI程序的输出结果加上一些HTTP协议所必须的HTTP头信息。
检查完毕后将把CGI程序的输出传送给client。
5. Webserver中断和client浏览器的连接。
6. Web浏览器将CGI程序的输出显示在浏览器的窗口上。