国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項超值服

開通VIP
CGI技術(shù)及其開發(fā)
 CGI技術(shù)及其開發(fā)
作為Internet上最主要的信息管理和組織手段,WWW由一系列相應(yīng)的技術(shù)及應(yīng)用構(gòu)
成,其組成技術(shù)包括HTTP、HTML、URL以及CGI等。WWW服務(wù)器本身提供一些基本功
能,以完成客戶端的請求和自身的管理。但不同的用戶有不同的功能要求,其中許
多功能是WWW服務(wù)器本身 不能提供的(比如在線查詢等),它必須提供一種擴(kuò)展手
段,以允許用戶編寫擴(kuò)展應(yīng)用程序來擴(kuò)展服務(wù)器的功能。CGI(CommonGatewayInterface,
即通用網(wǎng)關(guān)接口)就是這樣的一種標(biāo)準(zhǔn)擴(kuò)展技術(shù)。下面就CGI的基本技術(shù)及其開發(fā)
進(jìn)行討論。

一、CGI技術(shù)
1.1CGI的提出
CGI是外部擴(kuò)展應(yīng)用程序與WWW服務(wù)器交互的一個標(biāo)準(zhǔn)接口。按照CGI標(biāo)準(zhǔn)編寫的外
部擴(kuò)展應(yīng)用程序可以處理客戶端(一般是WWW瀏覽器)輸入的協(xié)同工作數(shù)據(jù),完成
客戶端與服務(wù)器的交互操作。這在實(shí)際應(yīng)用中非常有用,如可以編寫CGI外部擴(kuò)展
程序來訪問外部數(shù)據(jù)庫,客戶端用戶可以通過它和WWW服務(wù)器來進(jìn)行數(shù)據(jù)查詢。CGI
一般分兩種:標(biāo)準(zhǔn)CGI和緩沖CGI。所有的WWW服務(wù)器均應(yīng)支持標(biāo)準(zhǔn)CGI,按標(biāo)準(zhǔn)CGI
編寫的程序與具體的WWW服務(wù)器無關(guān)。而按緩沖CGI編寫的程序與WWW服務(wù)器有關(guān)。
1.2CGI的工作原理
1.標(biāo)準(zhǔn)CGI
客戶端、服務(wù)器、CGI接口與外部程序間的關(guān)系可用圖1-1表示:如上圖所示,服
務(wù)器是客戶端(如瀏覽器)與擴(kuò)展程序之間的通道。當(dāng)客戶端的用戶完成了一定
輸入工作(比如填充完HTML文檔中的FORM表)之后向服務(wù)器發(fā)出HTTP請求(稱為CGI
請求),服務(wù)器守護(hù)進(jìn)程接收到該請求后,就創(chuàng)建一個子進(jìn)程(稱為CGI進(jìn)程)。
該CGI子進(jìn)程將CGI請求的有關(guān)數(shù)據(jù)設(shè)置成環(huán)境變量,在外部CGI程序與服務(wù)器間建
立兩條數(shù)據(jù)通道(標(biāo)準(zhǔn)I/O),然后啟動URL指定的CGI程序,并與該子進(jìn)程保持同
步,以監(jiān)測CGI程序的執(zhí)行狀態(tài)。子進(jìn)程通過標(biāo)準(zhǔn)輸出流將處理結(jié)果傳遞給服務(wù)器
守護(hù)進(jìn)程,守護(hù)進(jìn)程再將處理結(jié)果作為應(yīng)答消息回送到客戶端。外部CGI程序通過
環(huán)境變量、命令行參數(shù)、標(biāo)準(zhǔn)輸入輸出與WWW服務(wù)器進(jìn)行通訊,傳遞有關(guān)參數(shù)和處
理結(jié)果。*環(huán)境變量:當(dāng)服務(wù)器守護(hù)進(jìn)程創(chuàng)建子進(jìn)程運(yùn)行CGI程序時,設(shè)置相應(yīng)的
環(huán)境變量和命令行參數(shù),以傳遞客戶端和服務(wù)器的有關(guān)信息給該子進(jìn)程。*命令行
參數(shù):命令行參數(shù)僅在有HTML文檔中有ISINDEX查詢的情況下使用。*標(biāo)準(zhǔn)輸入輸
出:當(dāng)HTTP請求模式采用POST方式時,CGI程序通過標(biāo)準(zhǔn)輸入流和有關(guān)環(huán)境變量來
獲取客戶端傳輸數(shù)據(jù);如采用GET方式時,CGI程序直接通過環(huán)境變量獲取客戶端傳
輸數(shù)據(jù)。當(dāng)CGI程序要返回處理結(jié)果(一般為HTML文檔)給客戶端時,它通過標(biāo)準(zhǔn)
輸出流將該結(jié)果數(shù)據(jù)傳遞給服務(wù)器守護(hù)進(jìn)程。
2.緩沖CGI
標(biāo)準(zhǔn)CGI使用Stdin/Stdout來進(jìn)行數(shù)據(jù)通訊,這是由其最初開發(fā)環(huán)境(Unix操作
系統(tǒng))所決定的。但是許多Windows環(huán)境下的編程工具(如VB和Delphi等)是不支
持這種I/O方式的,這時就不能用它們來開發(fā)基于標(biāo)準(zhǔn)CGI的應(yīng)用程序。于是有些
服務(wù)器提出了緩沖CGI的概念。緩沖CGI亦稱為WinCGI。此時CGI擴(kuò)展程序與服務(wù)器
間通過緩沖CGI而不是標(biāo)準(zhǔn)CGI進(jìn)行通訊,而緩沖CGI與服務(wù)器間的通訊還是通過標(biāo)
準(zhǔn)CGI接口。后者由WWW服務(wù)器的內(nèi)置緩沖處理程序?qū)崿F(xiàn)。這幾部分的關(guān)系可用圖
1-2表示:緩沖CGI的工作原理與標(biāo)準(zhǔn)CGI相似,不同的是當(dāng)服務(wù)器守護(hù)進(jìn)程接收
到客戶端的CGI請求時,所建立的CGI子進(jìn)程將CGI請求的有關(guān)數(shù)據(jù)設(shè)置成環(huán)境變量
外,還將它們保存在輸入緩沖區(qū)中;通過緩沖處理程序在外部CGI程序與服務(wù)器間
建立兩條數(shù)據(jù)通道(輸入/輸出緩沖區(qū))。CGI子進(jìn)程通過輸出緩沖區(qū)將處理結(jié)果
傳遞給服務(wù)器守護(hù)進(jìn)程。此處外部CGI程序通過環(huán)境變量和輸入/輸出緩沖區(qū)與WWW
服務(wù)器進(jìn)行通訊,傳遞有關(guān)參數(shù)和處理結(jié)果。此處環(huán)境變量的意義同上,不過這
些環(huán)境變量及其相應(yīng)值保存在輸入緩沖區(qū)中。此外,輸入緩沖區(qū)中還存放客戶端
的傳輸數(shù)據(jù)(如采用POST模式的話)。輸出緩沖區(qū)用來存放擴(kuò)展程序的處理結(jié)果。
3.標(biāo)準(zhǔn)CGI與緩沖CGI的區(qū)別
對CGI擴(kuò)展程序而言,最主要差別在于數(shù)據(jù)的I/O不同:對緩沖CGI,服務(wù)器與CGI
擴(kuò)展程序間的數(shù)據(jù)交換是通過緩沖區(qū);而標(biāo)準(zhǔn)CGI是通過標(biāo)準(zhǔn)I/O。使用緩沖CGI可
選擇更多的開發(fā)工具,可以開發(fā)Windows95和WindowsNT下的GUI擴(kuò)展程序;而使用
標(biāo)準(zhǔn)CGI所選用的開發(fā)工具必須支持標(biāo)準(zhǔn)I/O。只有少數(shù)幾種WWW服務(wù)器支持緩沖CGI,
因此基于它的擴(kuò)展程序兼容性不如標(biāo)準(zhǔn)CGI好。
1.3CGI與其他WWW技術(shù)的關(guān)系
CGI作為WWW服務(wù)器的標(biāo)準(zhǔn)擴(kuò)展技術(shù),由上面CGI的基本原理可知,它和許多其它的
WWW技術(shù)密切相關(guān),如HTTP、HTML、MIME和URL等,下面主要就它與前兩種技術(shù)的關(guān)
系進(jìn)行研究。
1.CGI與HTTP協(xié)議
CGI通過HTTP協(xié)議在客戶端和服務(wù)端進(jìn)行通訊:*客戶端用戶代理向服務(wù)器發(fā)送的
請求是HTTP請求消息。該消息中含有處理用戶輸入的CGI擴(kuò)展程序的URL值。*CGI
擴(kuò)展程序在處理結(jié)束后,返回給客戶端的應(yīng)答是HTTP應(yīng)答消息。因此CGI程序的輸
出數(shù)據(jù)必須符合HTTP應(yīng)答消息的語法格式,這在基于CGI標(biāo)準(zhǔn)的開發(fā)中非常重要。
2.CGI與HTML語言
CGI擴(kuò)展程序的輸出數(shù)據(jù)(HTTP應(yīng)答消息)一般有兩種:符合MIME類型的文檔(最
普遍的是HTML文檔,表示為text/html);指向其它文檔的URL鏈接。這兩種方式
都與HTML語言有關(guān),數(shù)據(jù)的組織須符合HTML語法格式。
1.4CGI開發(fā)的幾個問題
基于WWW的人機(jī)交互一般有兩種情況:本地交互和通過網(wǎng)絡(luò)傳輸?shù)慕换ァG罢呤侵?br>客戶端用戶的輸入數(shù)據(jù)在客戶端本地進(jìn)行處理,然后將處理結(jié)果返回給用戶,常
見的開發(fā)工具有JavaScript(Netscape開發(fā))和VBScript(Microsoft開發(fā));后
者是指客戶端用戶輸入的數(shù)據(jù)通過網(wǎng)絡(luò)傳輸?shù)絎WW服務(wù)器,服務(wù)器處理結(jié)束后將處
理結(jié)果返回給客戶端用戶,常見的開發(fā)技術(shù)是WWW服務(wù)器擴(kuò)展技術(shù)(如CGI,API等)。
此處主要討論基于標(biāo)準(zhǔn)CGI技術(shù)的通過網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)傳輸?shù)慕换?shí)現(xiàn)。對這種人機(jī)
交互的實(shí)現(xiàn),主要有三個環(huán)節(jié)需要解決:如何獲取客戶端傳輸?shù)臄?shù)據(jù),如何提取有
效數(shù)據(jù)并處理這些數(shù)據(jù),如何向客戶端返回應(yīng)答。下面分別結(jié)合有關(guān)技術(shù),談?wù)勥@
三方面問題的解決。
1.客戶端傳輸數(shù)據(jù)的獲取
由第三章CGI的原理可知,當(dāng)服務(wù)端守護(hù)進(jìn)程接收到客戶端用戶代理(如瀏覽器)
提交的CGI請求時,所創(chuàng)建的CGI子進(jìn)程會設(shè)置與CGI請求內(nèi)容有關(guān)的環(huán)境變量,并
建立服務(wù)器與外部CGI程序之間通訊的通道(即標(biāo)準(zhǔn)I/O)。CGI程序可以通過環(huán)境
變量,標(biāo)準(zhǔn)I/O或命令行參數(shù)獲取客戶端用戶輸入的數(shù)據(jù)。數(shù)據(jù)的獲取與請求所采
用的HTTP方法(Method)和用戶所使用的請求方式有關(guān)。用戶通過CGI請求數(shù)據(jù)一
般有三種方式:HTMLFORM表,ISINDEX,可點(diǎn)擊圖片(ISMAP或Imagemaps)。后兩
種方式是通過命令行參數(shù)傳遞用戶的輸入數(shù)據(jù);在C語言中(下面的舉例亦然),
CGI程序可以用argc和argv[int]獲得這些參數(shù)值。而前一種方式則取決于HTTP請
求方法;但不管采用何種方法,都將用到環(huán)境變量來傳遞有關(guān)請求內(nèi)容。
●獲取環(huán)境變量
環(huán)境變量的類別很多,包含客戶端和服務(wù)端的詳細(xì)信息。在一般CGI程序開發(fā)中,
下述幾個環(huán)境變量在數(shù)據(jù)傳遞中起著重要作用。
*GATEWAY―INTERFACE
CGI程序所使用的CGI標(biāo)準(zhǔn)接口的版本號。如使用的CGI1.1版,該變量表示為
“CGI/1.1”
*REQUEST―METHOD
HTTP請求方法。根據(jù)該變量值可判斷CGI請求所采用的請求方法,以決定是通過Stdin
還是通過環(huán)境變量QUERY―STRING獲取客戶端傳輸數(shù)據(jù)。
*QUERY―STRING
QUERY―STRING是CGI程序URL中″?″之后的數(shù)據(jù)。當(dāng)使用ISINDEX查詢或FORM表使
用GET方法時,客戶端傳輸數(shù)據(jù)可以通過讀取該變量而獲得。
*CONTENT―LENGTH
CONTENT―LENGTH表示客戶端傳輸數(shù)據(jù)的字節(jié)數(shù)。
*CONTENT―TYPE
CONTENT―TYPE表示客戶端傳輸數(shù)據(jù)的數(shù)據(jù)編碼類型。
利用―environ(int)函數(shù)可以獲得所有的環(huán)境變量及其值;
利用getenv(constchar*)函數(shù)可以獲得指定環(huán)境變量的相應(yīng)值。
●HTTP請求方法
客戶端用戶代理提交的CGI請求是HTTP請求,其中包括HTTP請求方法。HTTP協(xié)議定義
的請求方法中常用的主要有GET和POST。
客戶端FORM表的METHOD屬性用來設(shè)置請求方法,其缺省值為GET。如果在FORM中使用
GET方法,CGI程序通過環(huán)境變量QUERY―STRING獲取客戶端傳輸數(shù)據(jù)。如果在FORM中
使用POST方法,CGI程序通過通過CONTENT―LENGTH獲取客戶端傳輸數(shù)據(jù)的字節(jié)數(shù),
通過Stdin讀取客戶端傳輸數(shù)據(jù)。
2.有效數(shù)據(jù)的提取和處理
通過上述方式獲取的客戶端傳輸數(shù)據(jù)的一般格式為:
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表中某輸入域中輸入的值??蛻舳藗鬏敂?shù)據(jù)的每對″Name=Value″
串由′&′字符分隔,其數(shù)據(jù)編碼類型可以從環(huán)境變量CONTENT―TYPE獲取。CGI/1.1
版僅支持“application/x-www-form-urlen??coded”編碼方式。這種編碼方式和
URL的編碼方式一樣,遵循兩個規(guī)則:數(shù)據(jù)中的空格(ASCII碼值32)編碼成′+′號;
保留字符編碼成″%XX″形式,″XX″是該字符ASCII值的十六進(jìn)制表示,比如″$″
的編碼為″%24″,″?″的編碼為″%3F″。因此,要獲取客戶端用戶的輸入數(shù)據(jù),
必須對上述獲取的數(shù)據(jù)進(jìn)行分離和解碼等處理。利用函數(shù)strtok()、strchr()等
可以實(shí)現(xiàn)數(shù)據(jù)分離處理,而數(shù)據(jù)的解碼則需要對整個數(shù)據(jù)串進(jìn)行掃描,將數(shù)據(jù)串中的
″%XX″復(fù)原為對應(yīng)的ASCII碼。在提取到有效數(shù)據(jù)后,還可能進(jìn)行許多其他的處理,
如數(shù)據(jù)庫查詢等。這種處理與普通編程相同。
3.向客戶端返回應(yīng)答
CGI程序處理結(jié)束后,通過標(biāo)準(zhǔn)輸出流將應(yīng)答信息傳遞給服務(wù)器,再由服務(wù)器返回給發(fā)
出請求的客戶端。其輸出的應(yīng)答信息是HTTP應(yīng)答消息,它一般由兩部分組成:應(yīng)答頭
和應(yīng)答數(shù)據(jù)。常見的應(yīng)答頭包括三種頭域:Content―Type(數(shù)據(jù)編碼類型,用MIME類
型表示),Location(特定文檔的URL,這種情況不直接向客戶端輸出內(nèi)容而輸出該URL)
和Status(處理結(jié)果的狀態(tài)碼和狀態(tài)描述)。HTTP應(yīng)答頭由幾行格式相同的文本構(gòu)成,
每行的基本格式為:″頭域名:該域內(nèi)容″。應(yīng)答頭和應(yīng)答體之間用一空行加LF(或
CR/LF)分隔。應(yīng)答體為CGI擴(kuò)展程序的輸出數(shù)據(jù),其數(shù)據(jù)類型應(yīng)該與Content―Type
值相一致。CGI程序的輸出可以用printf()、puts()等標(biāo)準(zhǔn)I/O函數(shù)來實(shí)現(xiàn)。
4.CGI程序的開發(fā)及其一般流程
在開發(fā)CGI程序過程中,可根據(jù)實(shí)際情況(服務(wù)器提供的接口、實(shí)際需求和程序員經(jīng)驗(yàn)
等)選擇編程語言,如C/C++,Perl,TCL,AnyUnixshell,VB,AppleScript。如
果選用C/C++等語言,必須編譯成可執(zhí)行文件;如果選用Perl等解釋語言,服務(wù)器
必須安裝相應(yīng)的解釋器。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
FastCGI—— CGI簡介
post和get的區(qū)別
ARM
CGI簡介
我所了解的cgi
boa 流程分析
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服