CGI究竟是what?

CGI真的很簡單
在此以前,你或許據說過不少說CGI‘晦澀難懂’的言論。若是你會寫最基本的輸入輸出,那麼你就能夠寫出一個CGI腳本。若是你已是一個程序員,你只須要幾分整就能夠明白CGI究竟是個什麼東西。若是你還不是一個名程序員,對不起這篇文章不是很適合你,你能夠先去學習一些編程的知識,例如腳本語言或者shell編程。但你學完了這些,再回過頭來看!那麼讓咱們開始吧!html

這篇文章是寫一個CGI腳本用於處理HTML提交的表單。雖然跳過了一些細節,可是可讓你在短期內搞明白。python

什麼是CGI?
CGI不是一門編程語言。它是網頁的表單和你寫的程序之間通訊的一種協議。能夠用任何語言寫一個CGI腳本,這些語言只要能接收輸入輸出信息,讀取環境變量。因此,幾乎全部的編程語言都能寫一個CGI腳本,例如:python(把我大python放在第一個!),C,甚至是shell腳本。程序員

CGI腳本的結構
典型的CGI腳本作了以下的事情:shell

讀取用戶提交表單的信息。
處理這些信息(也就是實現業務)。
輸出,返回html響應(返回處理完的數據)。
下面主要解釋,第一步和最後一步
讀取用戶提交的表單
當用戶填寫完表單,點擊提交按鈕的時候。CGI腳本接收用戶表單的數據,這些數據都是k-v的集合的形式(也就是python中的字典)。這裏有寫實現的例子:python編程

若是你已經經過上面的例子看懂了,下面的就能夠忽略了。若是你還有些不懂請看下面來那兩個長的字符串。數據結構

「name1=value1&name2=value2&name3=value3」
"name1=value1;name2=value2;name3=value3"
區別就是:‘&’和‘;’這兩個符號,他們的做用都是分隔參數。下面還有兩件事情要作。app

把全部的‘+’變成‘空格’
把全部的符號都轉譯成‘%xx’樣式的符號,例如:‘%3d’轉化成‘=’
這樣作是爲了統一用戶的輸入,使用統一的URL-encoded進行轉譯。socket

那麼你從哪裏獲得這些轉譯完的字符串呢?根據提交時的時候選用的是什麼HTTP方法:編程語言

GET方法,環境變量是經過URL來傳遞的,例如:我google‘URL encoded’ 點擊搜索提交的請求就是: https://www.google.co.jp/search?q=URL+encoded(我省略其餘一些干擾項,注意‘空格’轉化成了‘+’
POST方法,經過HTTP消息主體傳遞的。注意:POST方法編碼類型有:application/x-www-form-urlencoded 或 multipart/form-data。
我找了一個很好的資料,很短,一路瞭然:POST對比GET方法ide

總結:CGI接收的用戶數據,是經過http協議傳遞過來的。而選用不一樣的‘Method’:GET或POST對CGI的接收沒有任何影響。這段是讓你明白:數據是怎麼經過http協議傳輸的。

發送響應(Response)返回給用戶
首先,第一行要寫:Content-type: text/html

新起一行,用於輸出數據。寫好HTML響應頁面。這個頁面是:當你的腳本處理完數據後,返回給用戶的結果。

是的,你能夠隨意編寫返回的HTML代碼。HTML很簡單,並且方便。

個人總結CGI是一種通訊協議,它把用戶傳遞過來的數據轉變成一個k-v的字典。這個字典中不光有用戶的數據,還有HTTP協議的參數。它作的就是把數據,組織成一個固定結構形式的數據。方便任何符合CGI協議的程序均可以調用!可是CGI不是負責通訊(傳輸數據)的,通訊的話是經過socket,也就是server,例如上面例子中,是經過Apache進行通訊。以後調用CGI腳本,把數據轉變成符合CGI協議的數據結構,用於後面的數據處理!

相關文章
相關標籤/搜索