複製鏈接
請複製以下鏈接發送給好友

通用網關接口

鎖定
通用網關接口用於初始化軟件服務的服務器方接口。這套接口描述了Web服務器與同一計算機上的軟件的通信方式。
中文名
通用網關接口
外文名
Common Gateway Interface
簡    介
它是一段程序,運行在服務器
運行環境
適用於各種類型機器
處理步驟
四個步驟
優    點
可以提供許多HTML無法做到的功能
工作原理
通過瀏覽器

通用網關接口簡介

通用網關接口,它是一段程序,運行在服務器上,提供同客户端HTML頁面的接口,通俗的講CGI就像是一座橋,把網頁和WEB服務器中的執行程序連接起來,它把HTML接收的指令傳遞給服務器,再把服務器執行的結果返還給HTML頁;用CGI可以實現處理表格數據庫查詢,發送電子郵件等許多操作,最常見的CGI程序就是計數器。CGI使網頁變得不是靜態的,而是交互式的。
CGI在物理上是一段程序,運行在服務器上,提供同客户端HTML頁面的接口。這樣説大概還不好理解。那麼我們看一個實際例子:截止2013的個人主頁上大部分都有一個留言本。留言本的工作是這樣的:先由用户在客户端輸入一些信息,如名字之類的東西。接着用户按一下“留言”(到目前為止工作都在客户端),瀏覽器把這些信息傳送到服務器的CGI目錄下特定的cgi程序中,於是cgi程序在服務器上按照預定的方法進行處理。在本例中就是把用户提交的信息存入指定的文件中。然後cgi程序給客户端發送一個信息,表示請求的任務已經結束。此時用户在瀏覽器裏將看到“留言結束”的字樣。整個過程結束。
隨着CGI的發展,類似於CGI的交互式方法也在出現,比如Servlet,Liveware,ASP和WAI等等 [1] 

通用網關接口歷史

最初,CGI是在1993年由美國國家超級電腦應用中心(NCSA)為NCSA HTTPdWeb服務器開發的。這個Web服務器使用了UNIXshell環境變量來保存從Web服務器傳遞出去的參數,然後生成一個運行CGI的獨立的進程。

通用網關接口解釋

通用網關接口是Web服務器將用户請求提交給應用程序並從用户處接收和返回數據的標準方法。當用户請求一個網頁(例如,點擊加亮的詞或者輸入一個網站的地址)時,服務器將返回所請求的頁面。然而,當用户在網頁上填寫一張表格並將其發送出去後,它通常需要經應用程序處理。Web服務器常將表格中的信息轉發給一個小應用程序,由它處理數據並返回確認信息。這種在服務器和應用程序之間交換信息的接口被稱作通用網關接口。它是互聯網上的超文本傳輸協議(HTTP)的一部分。 [2] 

通用網關接口功能

CGI CGI
絕大多數的CGI程序被用來解釋處理來自表單的輸入信息,並在服務器產生相應的處理,或將相應的信息反饋給瀏覽器。CGI程序使網頁具有交互功能。

通用網關接口運行環境

CGI程序最初在UNIX操作系統上CERN或NCSA格式的服務器上運行。 在其它操作系統(如:Windows NT及Windows 95等)的服務器上也廣泛地使用CGI程序,同時它也適用於各種類型機器。

通用網關接口處理步驟

⑴通過Internet把用户請求送到服務器。 ⑵服務器接收用户請求並交給CGI程序處理。 ⑶CGI程序把處理結果傳送給服務器。 ⑷服務器把結果送回到用户。

通用網關接口服務器配置

CGI程序不是放在服務器上就能順利運行,如果要想使其在服務器上順利的運行並準確的處理用户的請求,則須對所使用的服務器進行必要的設置。 配置:根據所使用的服務器類型以及它的設置把CGI程序放在某一特定的目錄中或使其帶有特定的擴展名。 ⑴CREN格式服務器的配置: 編輯CREN格式服務器的配置文件(通常為/etc/httpd.conf)在文件中加入:Exec cgi-bin/*/home/www/cgi-bin/*.exec。命令中出現的第一個參數cgi-bin/*指出了在URL中出現的目錄名字,並表示它出現在系統主機後的第一個目錄中,如:http://edgar.stern.nyn.***/cgi-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程序 [3] 

通用網關接口環境變量列表

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發送,一般為application/xwww-form-urlencoded。 CONTENT-LENGTH:POST方法輸入的數據的字節數 [4] 

通用網關接口優點

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等。不過對於那些沒有太多編程經驗的網頁製作人來説,實在是一個不小的難題 [5] 

通用網關接口CGI應用程序

通用網關接口工作原理

1.瀏覽器通過HTML表單或超鏈接請求指定服務器上一個CGI應用程序的URL。 2.服務器收到請求。 3.服務器執行所指定的CGI應用程序。 4.CGI應用程序執行所需要的操作,通常是基於瀏覽者輸入的內容。 5.CGI應用程序把結果格式化為網絡服務器瀏覽器能夠理解的文檔(通常是HTML網頁)。 6.網絡服務器把結果返回到瀏覽器中。

通用網關接口注意事項

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

通用網關接口ASP

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

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 的旗艦企業服務器的站點還多。
參考資料