WEB那點事:CGI 是什麼意思?

相信很多同學都知道,Apache、Tomacat,IIS等web服務器在運行的時候,會調用PHP,Java、.Net 等應用程序服務來執行具體的對數據庫的相關操作。

那麼他們直接具體是什麼關係呢?

又跟CGI有什麼關係呢?

================================================================================

先來看看CGI是什麼玩意。

CGI:通用網關接口(Common Gateway Interface)是一個Web服務器主機提供信息服務的標準接口。

通過CGI接口,Web服務器就能夠獲取客戶端提交的信息,轉交給服務器端的CGI程序進行處理,最後返回結果給客戶端。

組成CGI通信系統的是兩部分:一部分是html頁面,就是在用戶端瀏覽器上顯示的頁面。另一部分則是運行在服務器上的Cgi程序。

它們之間的通訊方式如下圖:

那麼這裏的CGI程序是個什麼概念呢?

CGI程序就是真正的被服務器(如Apache)調用的來處理用戶發送過來的數據的程序。所謂CGI程序就是按照CGI接口規範編寫的能夠處理用戶通過瀏覽器發送到服務器的數據的

一個程序。

首先,這個程序必須要按照CGI接口規範來寫。

前面已經說過了,CGI的學名就是通用網關接口,我們知道網關的概念是聯通一個網絡和另一個網絡的通道,那麼這裏我個人的理解就

是CGI這個網關,是連通web服務器這個大容器和服務器上其它資源(如:數據庫、文件)的一個通道。爲什麼需要網關進行連接呢,我們知道根據web服務器的設計規範來說,

web服務器只能操作它根目錄下的相關文件(如:Apache服務器默認只能操作/htdocs 這個目錄下的文件)。那麼對於web服務器以外的資源,如果服務器想要操作怎麼辦呢?

就需要用到CGI這個接口,這個接口定義了web服務器在操作其權限範圍以外的資源時需要遵循的規範及數據傳遞的方式。

有了上面這個理解,我們知道,CGI其實是一個接口規範,並且按照CGI接口規範開發的程序都可以叫做CGI程序。那麼可以用來開發CGI的程序有哪些呢?C、Java、PHP、

Perl、Asp、.Net等。

用Perl編寫的CGI程序後綴爲:.pl;Python編寫的CGI程序後綴爲:.py;而C編寫的CGI程序後綴爲:.cgi,如果在win下編譯出來的是.exe,最好將它重命名爲.cgi。

這些都是爲了HTTP服務能夠識別並調用它們。

其實最早的時候CGI程序是用C語言來編寫的    。

後來隨着互聯網的發展,逐步又有了豐富多彩的各種新的開發語言。

那麼我們從瀏覽器點擊一個按鈕向服務器發起請求這個過程是怎麼來處理的呢?

回想一下,我們在表單中有一個叫做Action的屬性,<Form action="xxx">,首先這個請求會被髮送到web服務器,然後web服務器根據你發過來URL請求找到相對應的CGI程

序(如:login.php)。然後web服務器會把數據按照CGI的接口標準傳遞給相應的CGI程序,對應的CGI程序處理過請求後,會返回數據,或者文件(一般是HTMl)給服務器,服務

器會把結果返回給瀏覽器,瀏覽器負責呈現用戶請求的處理結果。

這樣一個請求就算完成了,其實這個過程和我理解的web請求過程沒有太大的區別,只是這裏我在闡述CGI這個概念。

如果有興趣,可以用C來實現一個CGI程序。

品略圖書館 http://www.pinlue.com/

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