CGI是什麼

通用網關接口  Common Gateway Interface,簡稱CGI。在物理上是一段程序,運行在服務器上,提供同客戶端HTML頁面的接口。這樣說大概還不好理解。那麼我們看一個實際例子:現在的個人主頁上大部分都有一個留言本。留言本的工作是這樣的:先由用戶在客戶端輸入一些信息,如名字之類的東西。接着用戶按一下“留言”(到目前爲止工作都在客戶端),瀏覽器把這些信息傳送到服務器的CGI目錄下特定的cgi程序中,於是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程序。

環境變量列表

  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方法輸入的數據的字節數。

優點

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

應用程序工作原理

  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,且能夠幫助你編寫腳本

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章