天天看點

CGI (Common Gateway Interface) 通用網關接口 介紹

通用網關接口  Common Gate Interface,簡稱CGI。在實體上是一段程式,運作在伺服器上,提供同用戶端 Html頁面的接口。這樣說大概還不好了解。那麼我們看一個實際例子: 現在的個人首頁上大部分都有一個留言本。留言本的工作是這樣的:先由使用者在用戶端輸入一些資訊,如名字之類的東西。接着使用者按一下“留言”(到目前為止工作都在用戶端),浏覽器把這些資訊傳送到伺服器的CGI目錄下特定的cgi程式中,于是cgi程式在伺服器上按照預定的方法進行處理。在本例中就是把使用者送出的資訊存入指定的檔案中。然後cgi程式給用戶端發送一個資訊,表示請求的任務已經結束。此時使用者在浏覽器裡将看到“留言結束”的字樣。整個過程結束。

功能

  絕大多數的CGI程式被用來解釋處理來自 表單的輸入資訊,并在伺服器産生相應的處理,或将相應的資訊回報給浏覽器。CGI程式使網頁具有互動功能。

運作環境

  CGI程式最初在UNIX作業系統上CERN或NCSA格式的伺服器上運作。   在其它作業系統(如:windows NT及windows95等)的伺服器上也廣泛地使用CGI程式,同時它也适用于各種類型機器。

處理步驟

  ⑴通過Internet把使用者請求送到伺服器。   ⑵伺服器接收使用者請求并交給CGI程式處理。   ⑶CGI程式把處理結果傳送給伺服器。   ⑷伺服器把結果送回到使用者。

伺服器配置

  CGI程式不是放在伺服器上就能順利運作,如果要想使其在伺服器上順利的運作并準确的處理使用者的請求,則須對所使用的伺服器進行必要的設定。   配置:根據所使用的伺服器類型以及它的設定把CGI程式放在某一特定的目錄中或使其帶有特定的擴充名。   ⑴CREN格式伺服器的配置:   編輯CREN格式伺服器的配置檔案(通常為/etc/httpd.conf)   在檔案中加入:Exec cgi-bincgi-bin/   指令中的第二個參數表示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啟動的)。

編寫語言

  CGI可以用任何一種語言編寫,隻要這種語言具有标準輸入、輸出和環境變量。對初學者來說,最好選用易于歸檔和能有效表示大量資料結構的語言,例如UNIX環境中:   · Perl (Practical Extraction and Report Language)   · Bourne Shell或者Tcl (Tool Command Language)   · PHP(Hypertext Preprocessor))   由于C語言有較強的平台無關性,是以也是編寫CGI程式的首選。   Windows環境中:   · C和C++   由于Internet上大部分伺服器使用的是UNIX作業系統,且幾乎任一UNIX作業系統中都有Bourne Shell,因而後面講述的例子中大部分是用Bourne Shell編寫的。   最終Perl由于其跨作業系統、易于修改的特性成為了CGI的主流編寫語言,以至于一般的“cgi程式”就是Perl程式。

環境變量清單

  SERVER-NAME:運作CGI序為機器名或IP位址。   SERVER-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-HOST:發送程式的主機名,不能确定該值。   REMOTE-ADDR:發送程式的機器的IP位址。   REMOTE-USER:發送程式的人名。   CONTENT-TYPE:POST發送,一般為applioation/xwww-form-urlencoded。   CONTENT-LENGTH:POST方法輸入的資料的位元組數。

優點

  CGI可以為我們提供許多HTML無法做到的功能。比如 a.一個記數器 b.顧客資訊表格的送出以及統計 c.搜尋程式 d.WEB資料庫,用Html是沒有辦法記住客戶的任何資訊的,就算使用者願意讓你知道。用Html也是無法把資訊記錄到某一個特定檔案裡的。要把用戶端的資訊記錄在伺服器的硬碟上,就要用到CGI。 這是CGI最重要的作用,它補充了Html的不足。是的,僅僅是補充,不是替代。   使在網絡伺服器下運作外部分應用程式(或網關)成為可能。CGI-BIN 目錄是存放CGI腳本的地方。這些腳本使WWW伺服器和浏覽器能運作外部程式,而無需啟動另一個原因程式。   它是運作在Web伺服器上的一個程式,并由來自于浏覽者的輸人觸發。CGI是在HTTP伺服器下運作外部程式(或網關)的一個接口,它能讓網絡使用者通路遠端系統上的使用類型程式,就好像他們在實際使用那些遠端計算機一樣。   CGI能夠讓浏覽者與伺服器進行互動,如果你曾經遇到過在網絡上填表或者進行搜尋,就很有可能就是用的CGI。   盡管CGI易于使用,但是當大批人同時使用一個CGI應用程式是會反應較慢,網絡伺服器 速度也會受到很大 影響。CGI應用程式的優點是可以獨立運作。   CGI應用程式可以由大多數的程式設計語言編寫,如Perl(Practical Extraction and Report Language)、C\C++、Java 和Visual Basic等。不過對于那些沒有太多程式設計經驗的 網頁制作人來說,實在是一個不小的難題。

CGI應用程式的工作原理:

  1.浏覽器通過HTML表單或超連結請求指上一個CGI應用程式的URL。   2.伺服器收發到請求。   3.伺服器執行指定所CGI應用程式。   4.CGI應用程式執行所需要的操作,通常是基于浏覽者輸人的内容。   5.CGI應用程式把結果格式化為網絡伺服器和浏覽器能夠了解的文檔(通常是HTML網頁)。   6.網絡伺服器把結果傳回到浏覽器中。

有關CGI應用程式要注意的:

  CGI應用程式運作在浏覽器可以請求的伺服器系統上,執行時需要使用伺服器CPU時間和記憶體。如果有成千上萬的這種程式會同時運作,那會對伺服器系統提出極高的要求。你要慎重考慮這個問題,以防止伺服器系統崩潰。   不完善的CGI應用程式可能成為别人非法進人伺服器系統的通道,有可能導緻重要的資料被删除或外洩。   CGI應用程式主要的用途有以下幾種:   根據浏覽者填寫的HTML表單發送定制的答複。   建立可單擊的圖像縮小圖。   建立一個浏覽者可以搜尋内容的資料庫。   提供伺服器與資料庫的接口,并把結果轉換成HTML文檔。   制作動态HTML文擋。   如果一個CGI腳本可以在每台計算機上做同樣的事情;編寫腳本就會變的很容易。不幸的是,CGI腳本依賴于伺服器的作業系統,是以,對于非UNIX伺服器來說,Prl(UNIX下編寫腳本的一個常用工具)腳本毫無用處。是以,你必須定制安裝你的CGI腳本。   大多數伺服器都提供 CGI-BIN目錄,但是這還不夠。因為你應該擁有自己的CGI-BIN。這樣,你就能運作自己的腳本(而不是讓自己的系統去适應已存在于系統上的腳本)。是以,你的提供商應安裝CGI-BIN,且能夠幫助你編寫腳本

ASP:Active Server Pages

  ASP,活動伺服器頁面,就是一個程式設計環境,在其中,可以混合使用HTML、腳本語言以及元件來建立伺服器端功能強大的Internet應用程式。 如果你以前建立過一個站點,其中混合了HTML、腳本語言以及元件,你就可以在其中加入ASP程式代碼。通過在HTML頁面中加入腳本指令,你可以建立一個HTML使用者界面,并且,還可以通過使用元件包含一些商業邏輯規則。元件可以被腳本程式調用,也可以由其他的元件調用。   ASP的工作原理:   當在Web站點中融入ASP功能後,将發生以下事情:   1、使用者調出站點内容,預設頁面的擴充名是.asp。   2、浏覽器從伺服器上請求ASP檔案。   3、伺服器端腳本開始運作ASP。   4、ASP檔案按照從上到下的順序開始處理,執行腳本指令,執行HTML頁面内容。   5、頁面資訊發送到浏覽器。   因為腳本是在伺服器端運作的,是以Web伺服器完成所有處理後,将标準的HTML頁面送往浏覽器。這意味着,ASP隻能在可以支援的伺服器上運作。讓腳本駐留在伺服器端的另外一個益處是:使用者不可能看到原始腳本程式的代碼,使用者看到的,僅僅是最終産生的HTML内容

PHP:Hypertext Preprocessor

  PHP 是一種伺服器端的,嵌入HTML的腳本語言。PHP差別其他像用戶端Javascript的地方是它的代碼在伺服器端執行.PHP能做什麼?   最低水準,PHP可以做任何其他CGI程式所能做的事,例如收集表格資料,生成動态頁面内容,或者收發cookies.可能最強大,最有意義的特性是PHP支援大範圍的資料庫.書寫一個支援資料庫的Web 頁面是難以置信的簡單.   下面是目前支援的資料庫:   Adabas D InterBase Solid   dBase mSQL Sybase   Empress MySQL Velocis   FilePro Oracle Unix dbm   Informix PostgreSQL   PHP通過協定也支援與其他服務的"交談",像IMAP, SNMP, NNTP, POP3, 甚至是 HTTP. 你也可以打開晦澀的 網絡接口和其他協定互動.   PHP的簡要曆史   1994年秋季, Rasmus Lerdorf 開始構思 PHP. 早期的非發行版本被用在他的首頁上,以追蹤誰在看他的線上履歷. 1995年年初第一版本出台,當時PHP隻被認為是個人首頁開發工具.它由一個非常單純的隻能了解很少數特殊宏的分析引擎和 一些用在首頁後端通用的工具組成.如留言簿,計數器和其他一些東西.這個分析器在1995年年中被重寫并被命名為 PHP/FI 第二版. FI來自 Rasmus 寫的另外一個包, 用于解釋 html 形式的資料.他結合了個人首頁工具腳本和形式解析器,并加 上mSQL支援.這樣就産生 PHP/FI 了. PHP/FI以令人驚奇的步調成長,人們開始把自己的代碼貢獻給它.   很難給出它的硬統計表,但可以估計在1996年末,整個世界至少有15,000個網站在用PHP/FI.到1997年年中,這個 數字已經超過50,000了. 而在此時PHP的發展也發生了變化.由Rasmus自己偏愛的和幾個人開發的項目變成一個更有組織的團 體成就.Zeev Suraski和Andi Gutmans重寫了解析器.這個新的解析器成為PHP版本3的基礎.許多有用的代碼從PHP/FI 繼承到PHP3,并且很多是完全重寫的.   今天(1999年年中)不管是PHP/FI或PHP3與很多商業産品捆綁在一塊,例如C2級強度的Web伺服器和紅帽子Linux. 根據NetCraft提供的資料推斷,保守估計全世界應用PHP的網站已超過150,000個.由此看來,它比在網際網路上運作Netscape 的旗艦企業伺服器的站點還多.