十分鍾搞懂什么是CGI


原文:CGI Made Really Easy,在翻譯的過程中,我增加了一些我在學習過程中找到的更合適的資料,和自己的一些理解。不能算是嚴格的翻譯文章,應該算是我的看這篇文章的過程的隨筆吧。

CGI真的很簡單

在此之前,你或許聽說過很多說CGI‘晦澀難懂’的言論。如果你會寫最基本的輸入輸出,那么你就可以寫出一個CGI腳本。如果你已經是一個程序員,你只需要幾分整就可以明白CGI到底是個什么東西。如果你還不是一個名程序員,對不起這篇文章不是很適合你,你可以先去學習一些編程的知識,例如腳本語言或者shell編程。但你學完了這些,再回過頭來看!那么讓我們開始吧!

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

什么是CGI?

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

CGI腳本的結構

典型的CGI腳本做了如下的事情:

  1. 讀取用戶提交表單的信息。
  2. 處理這些信息(也就是實現業務)。
  3. 輸出,返回html響應(返回處理完的數據)。
    下面主要解釋,第一步和最后一步

讀取用戶提交的表單

當用戶填寫完表單,點擊提交按鈕的時候。CGI腳本接收用戶表單的數據,這些數據都是k-v的集合的形式(也就是python中的字典)。這里有寫實現的例子:python

如果你已經通過上面的例子看懂了,下面的就可以忽略了。如果你還有些不懂請看下面來那兩個長的字符串。

  • “name1=value1&name2=value2&name3=value3”
  • "name1=value1;name2=value2;name3=value3"

區別就是:‘&’和‘;’這兩個符號,他們的作用都是分隔參數。下面還有兩件事情要做。

  1. 把所有的‘+’變成‘空格’
  2. 把所有的符號都轉譯成‘%xx’樣式的符號,例如:‘%3d’轉化成‘=’

這樣做是為了統一用戶的輸入,使用統一的URL-encoded進行轉譯。

那么你從哪里得到這些轉譯完的字符串呢?根據提交時的時候選用的是什么HTTP方法:

我找了一個很好的資料,很短,一路了然:POST對比GET方法

總結: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協議的數據結構,用於后面的數據處理!

這個系列文章完成后,后面還有一個實戰系列。從頭寫一個web服務器,敬請期待!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM