Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3124644
  • 博文数量: 710
  • 博客积分: 14546
  • 博客等级: 上将
  • 技术积分: 6738
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-30 10:20
文章分类

全部博文(710)

文章存档

2016年(1)

2014年(7)

2013年(22)

2012年(227)

2011年(322)

2009年(119)

2008年(12)

分类: LINUX

2012-06-27 18:37:26

CGI1. 定义:

CGI全称是“公共网关界面”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。

Common Gate Intergace听起来让人有些专业, 我们就管它叫CGI好了。在物理上,CGI是一段程序,它运行在Server上,提供同客户段 Html页面的接口。这样说大概还不好理解。那么我们看一个实际例子:现在的个人主页上大部分都有一个留言本。留言本的工作是这样的:先由用户在客户段输入一些信息,如名字之类的东西。接着用户按一下“留言”(到目前为止工作都在客户端),浏览器把这些信息传送到服务器的CGI目录下特定的cgi程序中,于是cgi程序在服务器上按照预定的方法进行处理。在本例中就是把用户提交的信息存入指定的文件中。然后cgi程序给客户端发送一个信息,表示请求的任务已经结束。此时用户在浏览器里将看到“留言结束”的字样。整个过程结束。

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中出现的目录名字,并表示它出现在系统主机后的第一个目录中,如:
命令中的第二个参数表示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编写的。

最终Perl由于其跨操作系统、易于修改的特性成为了CGI的主流编写语言,以至于一般的“cgi程序”就是Perl程序。

7. 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方法输入的数据的字节数。

8.为什么使用CGI? 

CGI可以为我们提供许多HTML无法做到的功能。比如 a.一个记数器 b.顾客信息表格的提交以及统计 c.搜索程d.WEB数
据库 用Html是没有办法记住客户的任何信息的,就算用户愿意让你知道。用Html也是无法把信息记录到某一个特定文件里的。要把客户段的信息记录在服务器的硬盘上,就要用到CGI。 这是CGI最重要的作用,它补充了Html的不足。是的,仅仅是补充,不是替代。

补充:

CGI(Computer Generation Image)三次元CG
CGI(Computer Graphics Interface)计算机图形接口 

FastCGI

FastCGI同CGI一样是一个WEB服务器与外部程序接口的标准,它是为解决CGI的性能问题而开发的一种技术。

CGI技术的性能缺陷:

每当服务器收到一个对CGI程序请求时,服务器都将创建一个CGI程序的进程,CGI程序处理完请求后,将输出发给服务器或直接传回客户端,然后终止。

fastCGI 对CGI技术进行了改良,一个fastCGI进程在WEB服务器启动时或在客户端第一次请求时创建,它处理完客户端请求后并不终止,而是等待处理下一个请求。另外fastCGI程序与CGI程序与服务器的交互方式也不同,CGI程序通过环境变量、命令行、标准输入输出进行交互,因此CGI程序进程必须与服务器进程在同一台物理计算机上,而fastCGI程序与服务器进程通过网络连接交互,因此fastCGI程序可以分布在不同的计算机上,这不但可以提高性能,同时也提高了系统的扩展能力。

有关fastCGI的详细资料请参阅:

1. FastCGI 像是一个常驻 (long-live) 型的 CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去 fork 一次 (这是 CGI 最为人诟病的 fork-and-execute 模式)。

2. FastCGI 可在任何平台上使用,Netscape Enterprise 及 IIS 都有 FastCGI 的模块可供使用,阿帕契 (Apache,以及利用 Apache 衍生出做的服务器) 上也有 mod_fastcgi 可用。

3. FastCGI 支持 C/C++,Ruby, Perl,Tcl,Java,Python 等程序语言。

4. FastCGI 的应用程序亦兼容于 CGI。即 FastCGI 的应用程序也可以当成 CGI 来执行。

5. 现有的 CGI 程序要改写成 FastCGI 非常简单,最少可能只需要多加入三行程序代码。

6. FastCGI 的侦错方式与 CGI 大同小异,只要带入程序所需的环境变量及参数,即可在命令列模式执行或侦错。

7. FastCGI 应用程序的写作方式与 CGI 类似,除了几项原则要特别注意外,FastCGI 的写作方式跟 CGI 几乎一样,与学习 Web Server API 比较起来, FastCGI 简单多了。

8. FastCGI 支授分布式运算 (distributed computing),即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。

阅读(1288) | 评论(0) | 转发(0) |
0

上一篇:cgi,fastcgi

下一篇:FastCGI中文参考手册

给主人留下些什么吧!~~