標籤

2011年5月16日 星期一

LAB33


通用網關介面

通用網關介面Common Gateway Interface/CGI)是一種重要的網際網路技術,可以讓一個客戶端
,從網頁瀏覽器向執行在 Web 伺服器 上的程序,請求數據。
CGI 描述了客戶端和這個程序之間傳輸數據的一種標準。
最初,CGI 是在 1993 年由美國國家超級電腦應用中心NCSA)為 NCSA HTTPd web 伺服器開發的。
這個 Web 伺服器使用了 UNIX shell 環境變數 來保存從 Web 伺服器傳遞出去的參數,
然後生成一個運行 CGI 的獨立的進程
程式語言 Perl 是一個廣泛被用來編寫 CGI 程式的語言,但 CGI 的一個目的是要獨立於任何語言的。
Web 伺服器無須在這個問題上對語言有任何了解。 事實上,
CGI 程序可以用任何腳本語言或者是完全獨立程式語言實現
,只要這個語言可以在這個系統上運行。 除 Perl 外,像 Unix shell script, PythonRubyPHPTcl,C/C++
, 和 Visual Basic 都可以用來編寫 CGI 程序。
實現 Wikipedia 的 CGI 程序的一個例子:
首先用戶代理程序向這個 CGI 程序請求某個名稱的條目,
如果該條目頁面存在
,CGI 程序就會去獲取那個條目頁面的原始數據,
然後把它轉換成 HTML 並把結果輸出給瀏覽器;
如果該條目頁面不存在
,CGI 程序則會提示用戶新建一個頁面。
所有的 Wikipedia 操作都是通過這個 CGI 程序來處理的。
CGI 的工作方式,從 Web 伺服器的角度看,是在特定的位置
(比如:http://www.example.com/wiki.cgi)
定義了可以運行 CGI 程序。當收到一個匹配URL的請求,
相應的程序就會被調用,
並將客戶端發送的數據作為輸入。
程序的輸出會由 Web 伺服器收集,並加上合適的檔頭,
再發送回客戶端。
一般每次的 CGI 請求都需要新生成一個程序的副本來運行,
這樣大的工作量會很快將伺服器壓垮,
因此一些更有效的技術像 mod_perl
可以讓腳本解釋器直接作為模塊集
成在 Web 伺服器(例如:Apache)中,
這樣就能避免重複載入和初始化解釋器。
不過這只是就那些需要解釋器的高級語言(即解釋語言)
而言的,使用諸如 C 一類的編譯語言則可以避
免這種額外負荷。
由於 C 及其他編譯語言的程序與解釋語言程序相比
,前者的運行速度更快、對作業系統的負荷更小,
使用編譯語言程序是可能達到更高效率的。
資料來源:维基百科,自由的百科全书


沒有留言:

張貼留言