之前看了很多關於cgi的解釋,但還是對這個概念很模糊,今天看到了一篇部落格,覺得自己好像懂了一些,來總結一下。
定義:
cgi(common gateway inte***ce)是web 伺服器執行時外部程式的規範,按cgi 編寫的程式可以擴充套件伺服器功能。cgi 應用程式能與瀏覽器進行互動,還可通過資料api與資料庫伺服器等外部資料來源進行通訊,從資料庫伺服器中獲取資料。格式化為html文件後,傳送給瀏覽器,也可以將從瀏覽器獲得的資料放到資料庫中。
我的理解
我當時看完這個解釋之後依舊感到很迷茫,我們向瀏覽器傳送乙個請求之後,比如我們在位址列輸入乙個url,它從dns得到ip之後,經過層層傳輸到達了伺服器,伺服器通過解析http,把你要的請求資源給你。好像沒有什麼地方需要cgi?但仔細一想,我們從http拿出來的請求是怎麼被處理的呢?其實cgi就是處理這個請求的程式。
web伺服器解析了http請求之後,會將這個請求的各種引數寫進環境變數,比如request_method,path_info之類的,之後呢,伺服器會呼叫相應的程式進行處理(這個程式就是cgi),它會生成對應的內容,然後返回給伺服器,再由伺服器轉交給客戶端。
那cgi是怎麼實現的呢?
理論上,可以用任何語言來寫cgi。我們只需要讀取到儲存請求的cgi,然後做處理,用標準輸出將處理後的內容輸出。這裡的輸出被重定向到客戶瀏覽器。這樣,如果編寫乙個c的cgi程式的時候,把乙個html文件輸出到它的 stdout上,這個html文件會被在客戶端的瀏覽器中顯示出來。這也是cgi程式的乙個基本原理。
舉個例子:
這是乙個計算乘法的表單
< form action="/cgi-bin/mult.cgi" >
< p >請在下面填入乘數和被乘數,按下確定後可以看到結果。
< input name="m" size="5" >
< input name="n" size="5" >< br >
< input type="submit" value="確定" >
< /form >
下面就是處理這個表單的cgi程式,對應於form標籤中的action屬性值。
#include < stdio.h >
#include < stdlib.h >
int main(void)
我所了解的cgi
對於cgi,一開始我並沒有理解,一些概念性的東西,常常使我陷入咬文嚼字的陷阱裡。我希望找到乙個通俗易懂的案例,下面這段資料我個人覺得講得非常清楚 最早的web伺服器簡單地響應瀏覽器發來的http請求,並將儲存在伺服器上的html檔案返回給瀏覽器,也就是靜態html。事物總是不斷發展,也越來越複雜,所...
CGI原理解析系列之三
模擬了伺服器端 httpd 程序啟動 cgi的過程,完整展現了 get,post 方法支援 等待cgi子程序完全把資料讀取後寫入,實際情況應該是使用select 或者 epoll 監聽 usleep 1000 模擬接收 cgi 應答的資料 char buff 256 length read chil...
C語言寫cgi,個人的cgi庫
cgi程式可以用c c perl等多種語言編寫。本文以乙個最簡單的表單提交和cgi處理為例,示範了如何使用c語言編寫處理表單的cgi程式,這裡的有本人寫的乙個很小的cgi庫 一些相關的函式。更多關於cgi的背景知識,網上有很多介紹。表單頁面 如下 自製的cgi庫cgilib的標頭檔案 ifndef ...