1. 定义:
cgi(common gateway interface)是http服务器与你的或其它机器
上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。
2. 功能:
绝大多数的cgi程序被用来解释处理杰自表单的输入信息,并在服
务器产生相应的处理,或将相应的信息反馈给浏览器。cgi程序使
网页具有交互功能。
3. 运行环境:
cgi程序在unix操作系统上cern或ncsa格式的服务器上运行。
在其它操作系统(如:windows nt及windows95等)的服务器上
也广泛地使用cgi程序,同时它也适用于各种类型机器。
4. cgi处理步骤:
⑴通过internet把用户请求送到服务器。
⑵服务器接收用户请求并交给cgi程序处理。
⑶cgi程序把处理结果传送给服务器。
⑷服务器把结果送回到用户。
5. cgi服务器配置:
cgi程序不是放在服务器上就能顺利运行,如果要想使其在服务器
上顺利的运行并准确的处理用户的请求,则须对所使用的服务器进
行必要的设置。
配置:根据所使用的服务器类型以及它的设置把cgi程序放在某一
特定的目录中或使其带有特定的扩展名。
⑴cren格式服务器的配置:
编辑cren格式服务器的配置文件通常为/etc/httpd.conf/
在文件中加入:exec cgi-bin/*/home/www/cgi-bin/*.exec
命令中出现的第一个参数cgi-bin/*指出了在url中出现的目录
名字,并表示它出
现在系统主机后的第一个目录中,如:
http://edgar.stern.nyn.edu/cgi-bin/
命令中的第二个参数表示cgi程序目录放在系统中的真实路径。
cgi目录除了可以点网络文件放在同一目录中,也可以放在系统
的其它目录中,但必须保证在你的系统中也具有同样的目录。在
对服务器完成设置后,须重新启动服务器(除非http服务器是用
inetd启动的)。
⑵ncsa格式服务器的配置
在ncsa格式服务器上有两种方法进行设置:
①在srm.conf文件(通常在conf目录下)中加入:
script alias/cgi-bin/cgi-bin/
script alias命令指出某一目录下的文件是可执行程序,且这
个命令是用来执行
这些程序的;此命令的两个参数与cern格式服务器中的exec命
令的参数的含意一样。
②在srm.conf文件加入:
add type application/x-httpd-cgi.cgi
此命令表示在服务器上增加了一种新的文件类型,其后第一个
参数为cgi程序的mime类型,第二个参数是文件的扩展名,表
示以这一扩展名为扩展名的文件是cgi程序。
在用上述方法之一设置服务器后,都得重新启动服务器(除非
http服务器是用inetd启动的)。
6. cgi的编写语言
cgi可以用任何一种语言编写,只要这种语言具有标准输入、输出和
环境变量。对初学者来说,最好选用易于归档和能有效表示大量数据
结构的语言,例如
unix环境中:
· perl (practical extraction and reporting language)
· bourne shed或者tcl (tool command language)
windows环境中:
· c和c++
由于internet上大部分服务器使用的是unix操作系统,且几乎任
一unix操作系统中都有bourne shell,因而后面讲述的例子中大部
分是用bourne shell编写的。
7. cgi环境变量列表
用 好易环境变量探针 来查看cgi环境变量
server-name:运行cgi序为机器名或ip地址。
seuver-interface:www服务器的类型,如:cern型或ncsa型。
server-protocol:通信协议,应当是http/1.0。
server-port:tcp端口,一般说来web端口是80。
http-accept:http定义的浏览器能够接受的数据类型。
http-referer: 发送表单的文件url。
(并非所有的浏览器都传送这一变量)
http-user-agent:发送表单的浏览器的有关信息。
getway-interface:cgi程序的版本,在unix下为 cgi/1.1。
path-translated: path-info中包含的实际路径名。
path-info:浏览器用get方式发送数据时的附加路径。
script-name: cgi程序的路径名。
query-string:表单输入的数据,url中间号后的内容。
remote-nost:发送程序的主机名,不能确定该值。
remote-addr:发送程序的机器的ip地址。
remote-usbr:发送程序的人名。
content-type:post发送,一般为applioation/xwww-form-urlencoded。
content-length:post方法输入的数据的字节数。