说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

CGI技术及其开发(一)-Delphi资料

HTML文档下载 WORD文档下载 PDF文档下载
CGI技术及其开发(一)-Delphi资料

作为Internet上最主要的信息管理和组织手段,WWW由一系列相应的技术及应用构

成,其组成技术包括HTTP、HTML、URL以及CGI等。WWW服务器本身提供一些基本功

能,以完成客户端的请求和自身的管理。但不同的用户有不同的功能要求,其中许

多功能是WWW服务器本身 不能提供的(比如在线查询等),它必须提供一种扩展手

段,以允许用户编写扩展应用程序来扩展服务器的功能。CGI(CommonGatewayInterface,

即通用网关接口)就是这样的一种标准扩展技术。下面就CGI的基本技术及其开发

进行讨论。

一、CGI技术

1.1CGI的提出

CGI是外部扩展应用程序与WWW服务器交互的一个标准接口。按照CGI标准编写的外

部扩展应用程序可以处理客户端(一般是WWW浏览器)输入的协同工作数据,完成

客户端与服务器的交互操作。这在实际应用中非常有用,如可以编写CGI外部扩展

程序来访问外部数据库,客户端用户可以通过它和WWW服务器来进行数据查询。CGI

一般分两种:标准CGI和缓冲CGI。所有的WWW服务器均应支持标准CGI,按标准CGI

编写的程序与具体的WWW服务器无关。而按缓冲CGI编写的程序与WWW服务器有关。

1.2CGI的工作原理

1.标准CGI

客户端、服务器、CGI接口与外部程序间的关系可用图1-1表示:如上图所示,服

务器是客户端(如浏览器)与扩展程序之间的通道。当客户端的用户完成了一定

输入工作(比如填充完HTML文档中的FORM表)之后向服务器发出HTTP请求(称为CGI

请求),服务器守护进程接收到该请求后,就创建一个子进程(称为CGI进程)。

该CGI子进程将CGI请求的有关数据设置成环境变量,在外部CGI程序与服务器间建

立两条数据通道(标准I/O),然后启动URL指定的CGI程序,并与该子进程保持同

步,以监测CGI程序的执行状态。子进程通过标准输出流将处理结果传递给服务器

守护进程,守护进程再将处理结果作为应答消息回送到客户端。外部CGI程序通过

环境变量、命令行参数、标准输入输出与WWW服务器进行通讯,传递有关参数和处

理结果。*环境变量:当服务器守护进程创建子进程运行CGI程序时,设置相应的

环境变量和命令行参数,以传递客户端和服务器的有关信息给该子进程。*命令行

参数:命令行参数仅在有HTML文档中有ISINDEX查询的情况下使用。*标准输入输

出:当HTTP请求模式采用POST方式时,CGI程序通过标准输入流和有关环境变量来

获取客户端传输数据;如采用GET方式时,CGI程序直接通过环境变量获取客户端传

输数据。当CGI程序要返回处理结果(一般为HTML文档)给客户端时,它通过标准

输出流将该结果数据传递给服务器守护进程。

2.缓冲CGI

标准CGI使用Stdin/Stdout来进行数据通讯,这是由其最初开发环境(Unix操作

系统)所决定的。但是许多Windows环境下的编程工具(如VB和Delphi等)是不支

持这种I/O方式的,这时就不能用它们来开发基于标准CGI的应用程序。于是有些

服务器提出了缓冲CGI的概念。缓冲CGI亦称为WinCGI。此时CGI扩展程序与服务器

间通过缓冲CGI而不是标准CGI进行通讯,而缓冲CGI与服务器间的通讯还是通过标

准CGI接口。后者由WWW服务器的内置缓冲处理程序实现。这几部分的关系可用图

1-2表示:缓冲CGI的工作原理与标准CGI相似,不同的是当服务器守护进程接收

到客户端的CGI请求时,所建立的CGI子进程将CGI请求的有关数据设置成环境变量

外,还将它们保存在输入缓冲区中;通过缓冲处理程序在外部CGI程序与服务器间

建立两条数据通道(输入/输出缓冲区)。CGI子进程通过输出缓冲区将处理结果

传递给服务器守护进程。此处外部CGI程序通过环境变量和输入/输出缓冲区与WWW

服务器进行通讯,传递有关参数和处理结果。此处环境变量的意义同上,不过这

些环境变量及其相应值保存在输入缓冲区中。此外,输入缓冲区中还存放客户端

的传输数据(如采用POST模式的话)。输出缓冲区用来存放扩展程序的处理结果。

3.标准CGI与缓冲CGI的区别

对CGI扩展程序而言,最主要差别在于数据的I/O不同:对缓冲CGI,服务器与CGI

扩展程序间的数据交换是通过缓冲区;而标准CGI是通过标准I/O。使用缓冲CGI可

选择更多的开发工具,可以开发Windows95和WindowsNT下的GUI扩展程序;而使用

标准CGI所选用的开发工具必须支持标准I/O。只有少数几种WWW服务器支持缓冲CGI,

因此基于它的扩展程序兼容性不如标准CGI好。

1.3CGI与其他WWW技术的关系

CGI作为WWW服务器的标准扩展技术,由上面CGI的基本原理可知,它和许多其它的

WWW技术密切相关,如HTTP、HTML、MIME和URL等,下面主要就它与前两种技术的关

系进行研究。

1.CGI与HTTP协议

CGI通过HTTP协议在客户端和服务端进行通讯:*客户端用户代理向服务器发送的

请求是HTTP请求消息。该消息中含有处理用户输入的CGI扩展程序的URL值。*CGI

扩展程序在处理结束后,返回给客户端的应答是HTTP应答消息。因此CGI程序的输

出数据必须符合HTTP应答消息的语法格式,这在基于CGI标准的开发中非常重要。

2.CGI与HTML语言

CGI扩展程序的输出数据(HTTP应答消息)一般有两种:符合MIME类型的文档(最

普遍的是HTML文档,表示为text/html);指向其它文档的URL链接。这两种方式

都与HTML语言有关,数据的组织须符合HTML语法格式。

1.4CGI开发的几个问题

基于WWW的人机交互一般有两种情况:本地交互和通过网络传输的交互。前者是指

客户端用户的输入数据在客户端本地进行处理,然后将处理结果返回给用户,常

见的开发工具有JavaScript(Netscape开发)和VBScript(Microsoft开发);后

者是指客户端用户输入的数据通过网络传输到WWW服务器,服务器处理结束后将处

理结果返回给客户端用户,常见的开发技术是WWW服务器扩展技术(如CGI,API等)。

此处主要讨论基于标准CGI技术的通过网络进行数据传输的交互实现。对这种人机

交互的实现,主要有三个环节需要解决:如何获取客户端传输的数据,如何提取有

效数据并处理这些数据,如何向客户端返回应答。下面分别结合有关技术,谈谈这

三方面问题的解决。

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

由第三章CGI的原理可知,当服务端守护进程接收到客户端用户代理(如浏览器)

提交的CGI请求时,所创建的CGI子进程会设置与CGI请求内容有关的环境变量,并

建立服务器与外部CGI程序之间通讯的通道(即标准I/O)。CGI程序可以通过环境

变量,标准I/O或命令行参数获取客户端用户输入的数据。数据的获取与请求所采

用的HTTP方法(Method)和用户所使用的请求方式有关。用户通过CGI请求数据一

般有三种方式:HTMLFORM表,ISINDEX,可点击图片(ISMAP或Imagemaps)。后两

种方式是通过命令行参数传递用户的输入数据;在C语言中(下面的举例亦然),

CGI程序可以用argc和argv[int]获得这些参数值。而前一种方式则取决于HTTP请

求方法;但不管采用何种方法,都将用到环境变量来传递有关请求内容。

●获取环境变量

环境变量的类别很多,包含客户端和服务端的详细信息。在一般CGI程序开发中,

下述几个环境变量在数据传递中起着重要作用。

*GATEWAY—INTERFACE

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

“CGI/1.1”

*REQUEST—METHOD

HTTP请求方法。根据该变量值可判断CGI请求所采用的请求方法,以决定是通过Stdin

还是通过环境变量QUERY—STRING获取客户端传输数据。

*QUERY—STRING

QUERY—STRING是CGI程序URL中″?″之后的数据。当使用ISINDEX查询或FORM表使

用GET方法时,客户端传输数据可以通过读取该变量而获得。

*CONTENT—LENGTH

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

*CONTENT—TYPE

CONTENT—TYPE表示客户端传输数据的数据编码类型。

利用—environ(int)函数可以获得所有的环境变量及其值;

利用getenv(constchar*)函数可以获得指定环境变量的相应值。

●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

值相一致。CGI程序的输出可以用printf()、puts()等标准I/O函数来实现。

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

在开发CGI程序过程中,可根据实际情况(服务器提供的接口、实际需求和程序员经验

等)选择编程语言,如C/C++,Perl,TCL,AnyUnixshell,VB,AppleScript。如

果选用C/C++等语言,必须编译成可执行文件;如果选用Perl等解释语言,服务器

必须安装相应的解释器。

二、CGI与其它扩展技术的比较

除CGI标准扩展技术外,常见的扩展技术还有API(ApplicationProgrammingInterface)

和SSI(ServerSideIncludes),这两种技术都与具体的WWW服务器有关。下面先对这两

种技术简要说明,然后再对这三种技术作比较。SSI技术:当服务器守护进程接收到客

户端请求时,其子进程扫描客户端所请求的文档,以获取数据插入标志,再插入相关动

态数据,然后返回给客户端。这种技术简单,但效率不高。API技术:不同的WWW服务器

提供的API可能不同,比如O′ReillyWebsite提供的是WSAPI;PurveyorWebserver和Microsoft

IIS提供的是ISAPI。利用这些API编写程序的流程和最后生成的文件类型也不一样;比

如用ISAPI,编写程序时必须依照它的特定框架,最后建立的文件可以是EXE文件和DLL

文件。下表(图3-3)列出了CGI、SSI和API三种技术在主要性能方面的比较:SSI CGI API

实现的灵活性 差 好 好 可实现的功能 差 强大 强大对程序员的要求 低 一般 较高

开发与测试时间 短 一般 较长 花费 低 一般 较高操作的风险性 低 低 较大移植性

较好 较好 差 CPU的负载 高 高 较低CGI和API都需要编程实现,利用它们可访问更

多的数据源;而SSI不需编程。利用API开发的扩展软件,其运行速度比CGI快,功能也

较CGI强;但其操作有一定的风险,出现错误时可能使系统崩溃(CGI程序不会),并

且它非常依赖于具体的服务器而移植性太差,开发周期较长。CGI在操作的风险性、软

件移植性、软件开发难度等方面较API有优势;其缺点在于CPU负载较高,特别是同时

发生的CGI请求很多时,将影响服务器的综合性能。综合比较而言,CGI比其它两种技

术更优秀,在实际应用中也最为普遍。

把文件置入到Text或RichText中-VB资料 捕捉 MouseExit 事件 -VB资料 操作过程动态显示 -VB资料 查找月份的最后一天-VB资料 程序启动时,如何自动判断 MDB文件是否损坏并自动修复?-VB资料 读取和修改Windows注册表 -VB资料 对VB的IDE环境的扩展 防止文本控件中的部分滚动-VB资料 关闭正在运行的程序 -VB资料 关机消息的拦截 -VB资料 VB获得、设置鼠标双击间隔时间 VB获取当前系统平台 记载Windows使用的时间-VB资料 加速Visual Basic For Application(VBA) 监视程序的运行情况 -VB资料 交换鼠标按钮 -VB资料 交换鼠标左右键 -VB资料 禁止使用 Alt-Tab 或 Ctrl-Alt-Del -VB资料 控制光驱门的开关 -VB资料 VB利用 窗口函数监视系统的运行情况(VB类) VB判断是否在VB5环境下运行 VB判断一个32位程序是否结束 VB判断一个程序启动完成(不是结束) 屏蔽TextBox的系统菜单 -VB资料 启动时禁止装入 Add-Ins -VB资料 让Timer控件每5分钟触发一次事件 -VB资料 让程序启动快一点 -VB资料 VB如何调用系統的【查找】、【替换】的对话框? VB如何动态新增、移除 ODBC DSN? VB如何读取 Picture 内任何一点的颜色值? VB如何获取硬盘卷标、序列号和文件系统类型? 一个关于oracle中加锁的问题 请问这是什么错误? SQL 连接小问题 急求C++Builder 6的 ADO 补丁!(warmwk) 高分求救:在QT下,我已经实现了对一个XML的解析,但是对DTD的解析如何实现,谁给我讲讲,或者给我源代码更好。 关于ImportFile()执行后数据窗口update()的问题 有人参加过软件测试工程师的认证吗? 寄存器分段。。。 请问哪里有数据库设计规范方面的资料 关于使用inet控件对ftp操作的问题 一个设计方面的问题,各位高手请进!! 急急!清VB.net高手帮助.如何实现利用扬声器发生程序? 对象参数问题 如何得到文件路径 关于窗体的管理 JAVA代码操作数据库备份MYSQL? 我要将TEST01下所有的表授权有没有更简便的方法??? 数据库面试题,大家看看(给分无商量) 存储过程问题拉!帮忙看看吧! 关于ExportMap输出图片的问题? Image控件的问题? sql server 连接 请问无组建上传的详细代码解释。 怪问题! 对文件操作总报I/O error 32,请教???? 网上邻居的问题。 有一个比较基础的问题想同大家共同探讨。 急需各位高手帮忙 数据库冷备份脚本 在网页里如何检测IP地址? 调用其它程序问题! 谁能给我一个进销存的库结构啊 ▲▲▲ 有个"矩阵加括号"的通用程序,如何把它改得更好!!! "link"是什么意思? VB控件的问题 到这里放松一下吧:) 水晶报表报登录失败有什么原因? windows advanced server 2000 的雙網卡問題? SQL SERVER 在ASP 中的分页技术 socket数据传输中网络断开,如何处理? <<黑客II>>人物分析搞怪版 简单问题请教!!急!! 请问MSSQLServer7可以直接通过COPY数据库达到备份的目的吗? 各位大鸟们:帮兄弟拿个主意? 怎样改变webform的caption阿 怎样在程序中实现关闭或开启触发器? 如何把CListCtrl的滚动条移到最底端? TPageControl怎么动态生成一个TabSheet? vb6的工具菜单下有一个添加控件集工具,可以添加按钮列表框,树状视图列表视图拆分条,移动钮列表框3种,请问还可以找到更多的控件集吗? 请问为何cup周围有两个电容鼓起来? 上传文件时,出现Access to the path "c:\inetpub\wwwroot\upload\abcrar" is denied. 《李氏将伐颛臾》中;无乃尔是过与?的意思 三角形中的π是什么东西? 地缘战略位置是什么意思? 学无止境的近义词 草履虫游向食物和海豚顶球表演,哪个是反射? 英语翻译这首歌是披头士约翰列侬的!Motheryou had mebut I never had youI wanted youyou didn't want meSo II just got to tell youGoodbyegoodbyeFatheryou left mebut I never left youI needed youyou didn't need meSo II just got to tell youGoo 求2011年山东小学教师双对接远程研修的语文部分,专家引领专题,要求看完写心得体会,200,300字 结合自身条件谈谈对对课外体育运动的看法 英语翻译John Winston Ono Lennon,was born October 9th 1940 in Liverpool England.He was killed December 8th,1980 in New York.His parents seperated when he was four years old.After that he moved in with his aunt Mimi.His father was a commercial seam 现代文化繁荣的原因 国际体育的重要意义,结合事件体育概论,论述题, 高中阶段需要用多少倍的显微镜 从文化对社会影响的角度归纳我国提高文化竞争力的原因 有谁知道"Press of Northeast University of Technology"是什么意思啊?应该是出版社或报刊一类的. 备注和批注这两个词中的注什么意思 何其谦逊乃尔什么意思 现在是什么天气 判断一个点是否在一个三角形面内. “鲲鹏看待斥一般”出自《庄子.逍遥游》可演化为一个成语是鲲是庄子想象的一种大鱼,当它化而为鸟,就叫做鹏.鹏鸟向南海飞去,水击三千里,乘着旋风一下子就飞九万里.由此可演化为一个成 尽收眼底的意思是什么 怎样判断一个点是否在三角形内或者外我需要 的 我用来编程的啊 用方程的方法啊下面的大哥 你说的 方程 我还是没搞懂啊 你用 普通的方式给我写出来好嘛 就是X+Y=0 这样的形式 顶个球是什么意思 如何提高孩子集中力?多做体育运动 如何判断一个点在三角形内要通过计算。 石涧记古之人其有乐乎此耶的停顿 辩论:举国家之力办体育应该终止辩论赛题目,我邮箱是2009101626@hstc.edu.cn C#判断一个点是否在三角形内?在Form窗体中,指定三个坐标点A(ax,ay),B(bx,by),C(cx,cy),怎么判断一个任意点P(px,py)在点A,B,C所组成的三角形区域内? 予尝求古仁人之心 与 不求甚解 中的求 然则何时而乐耶 与 怏怏不乐 中的乐 加点字意思相同的是?要附上求和乐的解释! 地缘与区位区域有何不同 c++ 怎么判断一个点在三角形内已知三角形3点(x1,y1),(x2,y2),(x3,y3)和任意1点(x,y),怎么用程序判断点(x,y)在三角形内 低年级写字教学有效性研究结题报告怎么写 醉生梦死的含义是什么呢? 什么是公共政策制定过程的社会化 孔子说“天下有道则见,无道则隐”与其“知其不可而为之”的处世态度是否矛盾? 谁可以帮我写一篇介绍林志颖的英语短文?不好意思,原来没有说得很清楚...我需要一篇短文就好了...最好介绍一下还有林志颖给汶川灾区捐款的事迹.... 社会化社区卫生服务体系的特点有哪些 贴是什么意思 以《我是颖谜》为题目,写一篇赞美林志颖的作文 林志颖的粉丝进 台湾现在还属于中国管吗?可是台湾无论财政缴纳,都和中央没有关系.虽然1945时回归了中国,可那是国民政府,自新中国成立,台湾就与中国分裂.到现在我也没有听说中国收复台湾主权的问题,也 欲得识于人,欲得识于人,先识其邻 w n u e t组成单词 五六十年代,苏联(加加林卫星)有优势的时候,美国怎样理解集体所有制制?(共产主义) 其人欲分数金为谢什么意思 三角形中的π是什么东西? 英文Technology的音标是什么? 先秦 社会混乱 为什么思想却很活跃? 是什么三角形 acadmic / enthusiastic /information / brilliant / 都怎么念 ,音标也写上,也要翻译, 逍遥游中的成语 成语 秋水( )什么 望穿秋水 ,秋水时至 的不要来 孟子.荀子 .孙子.三国志 哪个不是先秦时代的happywanghaoyi 先秦时期的经济特点是什么.字数不需要太多、500字一下就好 是什么三角形,?速度啊, Information Technology Management里面出现Quality Information Technology Plan和Information Technology Quality Plan 两句话好像这是调换了一下次序,应该怎么翻译啊 为什么毛诗序是对先秦儒家思想的总结? 像一个海豚顶球的汽车标志是什么 MATLAB里如何计算带有未知量的积分?如 f(x,t) 是有关x和t的函数,要计算 ∫ f(x,t) dx其中x的上下限为确定的两个数,计算出来的积分结果应为t的表达式,如何用int实现?或者用其他积分函数实现也可 RT 谁知道和 秋水相关的两个成语跟庄子的 秋水有关两个成语是啥?【原文】秋水时至(1),百川灌河(2);泾流之大(3),两涘渚崖之间不辩牛马(4).于是焉河伯欣然自喜(5),以天下之美为尽在己(6).顺流 备注和批注这两个注什么意思 美国加油站员工遭枪击 子弹打中手机躲穆兄会领导人将首次在埃及受审 原定于穆兄会领导人将首次在埃及受审 原定于日本一男子摔死1岁女儿 只因其哭闹不飓风袭击德国致多地交通瘫痪 乘客被困新华国际时评:“三无”安倍何谈“领袖中美就推动朝鲜半岛无核化和重启六方会俄圣彼得堡将遭强飓风袭击 涅瓦河水位日本一办公室里种大麻盈利逾千万日元 美国14名男子因向未成年人传播色情图德联邦议院将召开特别会议商讨美监听事美一独臂独腿男勇闯火海协助救出两名儿美国14名男子因向未成年人传播色情图泰国美白产品广告被批有种族歧视之嫌已日本研发“织女”机器人助人感受与亲友美16岁少年因被没收手机心生不满将母黎巴嫩毒品走私严重 被指可能用于资助国际奥委会主席称赞索契为冬奥会准备工美国一男子被误判坐牢20余年后被释放法媒称索马里“青年党”一头目被美国无新加坡突查检查起重机安全 90家公司望洲负责人称所获授权不完全 账户全由24部门罕见联手出台10大利好 楼市金融圈子流行的小段子房贷猛增是房价暴涨的推手?众泰汽车2016北京车展新品发布会纪房价大涨房企利润下滑,90%房企将消春季如何洗脸足球巨星欧文亲驾名爵锐腾8秒破百静谧的豪华 林肯携两款新车亮相北京车女性向RPG游戏《玩具的游行》预注册苹果发13年来最差业绩:市值蒸发40宝沃汽车携SUV家族出击北京车展BX黄金大公开赛分组产生 比赛采用狂野模不良习惯会影响宝宝的智力发展海马V70上市 进击自主中高端MPV北京车展近30款上市新车盘点 SUV考验!轨道2号线动工后 贵阳13个点奇迹暖暖服装店值得购买的实用服饰第4期小客车专段号牌摇号:贵阳指标争全国铁路将实行新列车运行图 坐高铁到压缩12亿行政经费 贵州教育“9+3
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘