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

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比其它两种技

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

Pinterest或超Twitter成第二大社交网站 适合儿童上手的八款编程工具 一周云事件:亚马逊对消费者的吸引力超过苹果 比尔&#183;盖茨对微软创新和手机不满意 让我们一起来做最漂亮的Android界面吧! 响应高达6秒 用户揭露Heroku修改路由“50倍圈钱”? [探讨]响应式设计四大原则 Linux Kernel 3.8发布 停止支持386设备 HTML5手机游戏引擎Devkit开源 程序员的一天:台湾个人移动游戏开发者 极限破解:利用低温环境读取Android加密数据 五种工具保护你的在线隐私 从打压到支持 微软与GitHub的爱恨情仇 “夫妻档”初创公司百万美元打造实时Hadoop系统 编程从娃娃抓起:13岁儿童的移动游戏之梦 新浪管理层调整 许良杰任CTO兼联席总裁 Java,你还会让多少人继续“受伤”? 中国或超美国 成全球智能设备市场霸主 告别手写 API文档生成工具推荐 微软Azure超越亚马逊云计算的性能测试 苹果创新已经被三星超越 不靠广告也盈利:移动应用掘金7大案例剖析 谈Clash of Clans货币化的成功 UX设计师应当规避的七大问题 初创公司Citus Data将CitusDB扩展到Hadoop 移动医疗:巢儿孵化器为何笃信是创业金矿? 一个新的雅虎:雅虎主页改版 谷歌发布Google Glass最新视频 公开接受预定 微软Windows Blue结束半程开发 或今年8月推出 JavaFX即将开源,支持iOS与Android开发 趣味编程网Codecademy携手Twitter、Evernote、Box等推出系列API教程 请高手指教!!! 如何使用DLL(在线等待) 终于配置成功了jboss应用服务器 动态报表设计 备份日志语句! 98的MSDOS程序都不能运行了,说与系统连接的设备不能运行了,怎么解决?急!!! 问个色彩寄存器的问题 关于WINDOWS服务定时运行的问题,求救!!!!。。 加急!如何只将文档发送给[代办事宜]中,而在邮件数据库中不留痕迹? initialize the Borland Database Engine (error $2501) 带小数点的数字用什么变量类型? 谁用过DHTMLEDIT控件?帮帮忙介绍一下用法。 该死的ACCESS 怎样编写服务器接受客户端的相应程序 我的机子安装完WIN2000后,访问其它的计算机就死机,别的机子访问我机子的时候,我的机子也会死机。 怎样合并两个表??????? 一个有关ISampleGrabber接口调用的问题!Please HELP ME... 如何访问客户端指定路径上的ACCESS数据库? 可以远程安装win2k服务器版么?(各位帮忙!) 还有1。2的考试吗 一条sql语句! 我能在w2k下为非PnP串口设备写驱动吗? 哪位可以解释一下,构造函数到底有什么作用??? 难道没有高手帮我解决这个问题吗?mysql 版主请进 菜单如何显示在工具栏之上? 有关线程之间交换信息的问题 为什么在WIDNOWS98下用MASM50编译的汇编程序不能运行? sql如何自动定时清空日志?(在线等待!) 游戏 有没有办法用纯Javascript取得<form>里面用post方法post过来的数据?100分在线等候!!!绝对给分!!!!! 大家好,级联菜单怎么做呀?再线等待!!!急 邮件发送不了??? 一个落后的问题,用DAO能链接sql server数据库吗?如果可以,怎么链接!? PB中用代码建立ODBC数据源问题。 response中的问题 大家好。 我是新人。。。。。。。 关于用vc操作word中表格的问题 我的机子运行了几个用bde连接数据库的程序,在delphi里就打开不了src了出现以下错误! 求大家一个问题.我已经快疯了?我在等待ing 请问如何用delphi编写一个录音的com组件,在ASP中调用,详细些! 不知道自己到底喜不喜欢女朋友,纳闷.......... 急问!!! 很简单的问题,但是很急,解决了就给分!! 根据一些来历不明的消息说,微软将在2008年停止对 VB.NET 进行技术支持。是真的吗??? 怎样实现倒退和快进,用mediaplay组件播放影片,想在影片结束时自动调用某个过程,这个影片结束的事件是什么? 怪:DataGrid中选择一行后此行不能编辑! 有谁用过工商银行的国际借记卡了吗? 如何将反馈表中的若干表单内容发送到指定的邮箱并同时抄送到另一信箱? 使用游标时出现 -1002 的错误如何解决? 数据的初始化问题。 What’s this___English?Sorry.I don’t know.应该填啥? How many students are going to watch the s_ with me this afternoon Nobody can finish the work in two days.(同义句转换) —— ——can finish the work in two days. sorry I don't know. 翻译中文? There are many people here on vacation改为反意问句! it is the first time for him to make a speech in the presence of many people这个句子有没有语法错误 the is where postoffice(连词成句) There are many people here on vacation.what do you want to be when you grow up?英汉互译 Time is money in a way.in a way 的意思是 A.sometimes B.partly C.actually D.on the way 连词成句!Where bin the trash is I am sorry to have kept you waiting.---Oh,not at all.I__here only a few minutes.A.hawe come B.had beenC.wasD.have been the first time i ever witnessed the death of .求翻译,谢谢.the first time i ever witnessed the death of sea creature from bullet wounds was on the beach in my hometown a neighborhood boy ,Zach ,fell over a wounded seal while walking in the sea. 英语翻译接上面will need to carry the complete pair to show the final effect of style. I'm sorry to have kept you waiting .-- Oh .not at all .I ___ here for only a few minutes.本题要用现在完成时还是过去完成时?为什么(我认为应该用过去完成时但不确定) Some _______________(Germany) students will visit our university next month.说一下德国人这个词的词性转化,顺便说一下其他国家的转换 改错 There is some chesses in the teacher's office --i am sorry to have kept you waiting long ---never mind .i (-----)here for only a few minutesa have been b have come c have arrived d waited The leaders of a Canadian c____ will come to visit our university next week. On the teacher's desk _______some flowers.选择A.has B.there's C.is D.are ―I’ m sorry to have kept you waiting .―Never mind.I ( )(be) here for pnly a few minutes. If you really have to leave during the meeting,you'd better leave_____the back door.A.for;B.by;C.across;D.out 答案给的是B,是leave by为一个整体,还是by the back door为一个整体【就是怎么断句啊 /疑问】为什么其他几个选 我在实验中学上学:I am from Shiyan Middle school 我在七年级一班:I am in Class One Grade Seven.我最喜欢的食物是苹果:My favourite food are apples. i'm sorry to have kept you waiting long.never mind.I( )here for only a fewminutes.A、have been B、have come C、have arrived D、waited if you really have to leave during the meeting,you'd better leave __the back door.为什么填by,不填out i am in nan chang middle school,class 4 ,grade 7.的汉语意思 I borrowed some books from Mike.中的from Mike是什么成分,如果是状语,是什么状语 那可以把some book Do you have to write to your friend?-Sorry,but I really ______. A.can't B.must C.have D.should I am o pupil of Grade one,i am in No.1 Middle School. to share some thoughts 在句中是状语,还是定语呀?1、Tonight, with a thankful heart, I have asked for a final opportunity to share some thoughts on the journey we have traveled together and the future of our nation."to share some thoughts Two days is not enough for me to finish the work,I need ____ day.A.a third B.a few C.some D.the third请详细分析所选答案的原因,并分析考察的知识点, 连词成句:IS,THE,A,THERE,HOSOITAL,MIDDLE,IN I borrowed some books from Mike.中的from Mike是什么成分,如果是状语,是什么状语那可以把some book 理解为直接宾语 而Mike理解为间接宾语 因为lend sth to sb 就说sth 是直接宾语 sb是间接宾语 Two days is not enough for him to finish the work.He needs _______ day.选择一项:a.the thirdb.otherc.a thirdd.the other为什么选C啊 连词成句is,the,in,the,plate,middle. My cousin usually walks to school every morning 同义句 Two days is not enough for him to finish the work.He needs _______ day.A、 other  B、 the other  C、 the third  D、 a third  _Mum,our teacher told us to be _____and buy only what we need._Oh,dear .I'm glad to here that.A.content B.generous C.practicle D.actual John usually goes to school () bike 1.give sb some advice on sth意思是?和give sb some advice 区别是?2.用give sb some advice on sth 造个句子. Are you ___ when you are___ at home?A.alone,alone B.lonely,alone选择 Students often exchange gifts with _____ when they leave school.求答案与原因A.both B.the others C.others D.one another 写出下列句子的同义句1.the pands are interesting 2.there are many people here on vacation.3.the room has three doors.4.everyone is having fun. I do feel lonely when I miss you 为什么要加do呢 sorry,my english is so poor that i am afraid i will turn you down翻译 Alot of English have three names Do you feel ______when you are alone at home . I am so sorry to let you down I took a bus to school yesterday.改为否定句I ( )( )a bus to school yesterday. there is____in my office.A.air-conditionded B.air-conditioner C.an air-conditioner D.air-condition turn you down的意思 he__(take)no.3 bus to school yesterday 怎么填 是took还是tooks he fell off his bike but he won't hurthe fell off his bike but he _______ ______ _______ I think it a good idea to ask him some advice. 选词填空 took,expensive,because,invited,yesterday,winter,surprise,decided,favorite,schoolthe( )vacation started( )at Su Hai and Su Yang's( ) Su Hai and Su yang's family ( )to eat out.their good friend,Mike ( )them to his( )restaurant.It w I fell off my bike,but_____I didn't hurt myself.我正在线上,过了今天就作废. i'm in class two,grade five.改成否定句和一般疑问句 jack took a bus to school yesterday改为同义语 2.The river is ____ after the rain.A.risen B.rising C.raised D.raising I'm in Class2,Grade4.(根据答句写问句) I need two days to finish the work.空格中填上many的正确形式
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘