« 年度10大奖~~~Linux下Apache+cgi的配置方法(虚拟机环境) »

cgi学习总结

下文是我工作过程中对cgi的一些认识。

一、CGI的简单介绍

1. 定义:

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

2. 功能:

绝大多数的CGI程序被用来解释处理来自表单的输入信息,并在服务器产生相应的处理,或将相应的信息反馈给浏览器。CGI程序使网页具有交互功能。

3. 运行环境:

CGI程序在UNIX操作系统上CERN或NCSA格式的服务器上运行。在其它操作系统(如:windows NT及windows95等)的服务器上也广泛地使用CGI程序,同时它也适用于各种类型机器。

4. CGI处理步骤:

⑴、通过Internet把用户请求送到服务器。

⑵、服务器接收用户请求并交给CGI程序处理。

⑶、CGI程序把处理结果传送给服务器。

⑷、服务器把结果送回到用户。

二、CGI技术的简单介绍

1、客户端传输数据的获取

原理:当服务端守护进程接收到客户端用户代理(如浏览器)提交的CGI请求时,所创建的CGI子进程会设置与CGI请求内容有关的环境变量,并建立服务器与外部CGI程序之间通讯的通道(即标准I/O)。CGI程序可以通过环境变量,标准I/O或命令行参数获取客户端用户输入的数据。数据的获取与请求所采用的HTTP方法(Method)和用户所使用的请求方式有关。

l         获取环境变量

环境变量的类别很多,包含客户端和服务端的详细信息。在一般CGI程序开发中,下述几个环境变量在数据传递中起着重要作用。

 (1)、GATEWAY-INTERFACE

    CGI程序所使用的CGI标准接口的版本号。如使用的CGI1.1版,该变量表示为“CGI/1.1”

  (2)、REQUEST-METHOD

    HTTP请求方法。根据该变量值可判断CGI请求所采用的请求方法,以决定是通过Stdin还是通过环境变量QUERY-STRING获取客户端传输数据。

    (3)、QUERY-STRING

    QUERY-STRING是CGI程序URL中″?″之后的数据。当使用ISINDEX查询或FORM表使用GET方法时,客户端传输数据可以通过读取该变量而获得。

    (4)、CONTENT-LENGTH

    CONTENT-LENGTH表示客户端传输数据的字节数。

    (5)、CONTENT-TYPE

    CONTENT-TYPE表示客户端传输数据的数据编码类型。利用-environ(int)函数可以获得所有的环境变量及其值;利用getenv(constchar*)函数可以获得指定环境变量的相应值。

 1、 HTTP请求方法

客户端用户代理提交的CGI请求是HTTP请求,其中包括HTTP请求方法。HTTP协议定义的请求方法中常用的主要有GET和POST。客户端FORM表的METHOD属性用来设置请求方法,其缺省值为GET。

 如果在FORM中使用GET方法,CGI程序通过环境变量QUERY-STRING获取客户端传输数据。

如果在FORM中使用POST方法,CGI程序通过通过CONTENT-LENGTH获取客户端传输数据的字节数,通过Stdin读取客户端传输数据。

2.有效数据的提取和处理

通过上述方式获取的客户端传输数据的一般格式为:

name[1]=value[1]&name[2]=value[2]&...name[i]=value[i]...name[n]=value[n]

(1Ι=iΙ=n)    其中name[i]表示变量名,它是在FORM表中某输入域的名字;value[i]表示变量值,它是用户在FORM表中某输入域中输入的值。

客户端传输数据的每对″Name=Value″串由′&′字符分隔,其数据编码类型可以从环境变量CONTENT-TYPE获取。CGI/1.1版仅支持“application/x-www-form-urlencoded”编码方式。这种编码方式和URL的编码方式一样,遵循两个规则:数据中的空格(ASCII码值32)编码成'+'号;保留字符编码成″%XX″形式,″XX″是该字符ASCII值的十六进制表示,比如″$″的编码为″%24″,″?″的编码为″%3F″。

因此,要获取客户端用户的输入数据,必须对上述获取的数据进行分离和解码等处理。利用函数strtok()、strchr()等可以实现数据分离处理,而数据的解码则需要对整个数据串进行扫描,将数据串中的″%XX″复原为对应的ASCII码。

在提取到有效数据后,还可能进行许多其他的处理,如数据库查询等。这种处理与普通编程相同。

 

3.向客户端返回应答

    CGI程序处理结束后,通过标准输出流将应答信息传递给服务器,再由服务器返回给发出请求的客户端。其输出的应答信息是HTTP应答消息,它一般由两部分组成:应答头和应答数据。

常见的应答头包括三种头域:Content-Type(数据编码类型,用MIME类型表示),Location(特定文档的URL,这种情况不直接向客户端输出内容而输出该URL)和Status(处理结果的状态码和状态描述)。HTTP应答头由几行格式相同的文本构成,每行的基本格式为:″头域名:该域内容″。应答头和应答体之间用一空行加LF(或CR/LF)分隔。应答体为CGI扩展程序的输出数据,其数据类型应该与Content-Type值相一致。

4.CGI程序的开发及其一般流程

    在开发CGI程序过程中,可根据实际情况(服务器提供的接口、实际需求和程序员经验等)选择编程语言,如C/C++,Perl,TCL,AnyUnixshell,VB,AppleScript。如果选用C/C++等语言,必须编译成可执行文件;如果选用Perl等解释语言,服务器必须安装相应的解释器。

原创文章如转载,请注明:转载自悠悠博客 [ http://www.ajaxstu.com/ ]

相关文章:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。