青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

doing5552

記錄每日點滴,不枉人生一世

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  73 Posts :: 0 Stories :: 94 Comments :: 0 Trackbacks

公告

常用鏈接

留言簿(24)

我參與的團隊

最新隨筆

搜索

  •  

積分與排名

  • 積分 - 456153
  • 排名 - 49

最新隨筆

最新評論

閱讀排行榜

評論排行榜

    大二的時候就開始接觸CGI了,那時候用perl、php都寫過CGI程序,對CGI的了解

也浮于表面上,最近由于工作需要,需要用C來寫CGI程序,是時候弄清楚CGI內部的工

作機制了。

1. CGI是什么?

  相信很多人和我之前一樣,說到CGI,會熟練的蹦出一句“Common Gateway

Interface ”,沒錯,這確實是CGI的全稱,可以翻譯為“通用網關接口”,可一說到它的

用處,有多少人能夠講清楚? 沒關系,現在我就幫大家來解決這個困惑。按照CGI 1.1

里面的說法“The Common Gateway Interface (CGI) is a simple interface for

running external programs, software or gateways under an information server in

a platform–idependent manner. Currently, the supported information servers

are HTTP servers.”,和我們熟悉的一樣,CGI現在都用在http服務器上,那么CGI能夠

提供怎樣的便利呢?答案如下:“A plain HTML document that the Web daemon

retrieves is static, which means it exists in a constant state: a text file

that doesn’t change. A CGI program, on the other hand, is executed in

real-time, so that it can output dynamic information.”

2. CGI接口定義

    目前關于CGI接口最新的版本是1.1, 既然CGI程序充當的角色是一個Gateway,那么

這個Gateway的兩端是什么?沒錯,是Http Server(Web Server)的輸入和輸出,換句話說

,CGI程序從Web Server那里獲得瀏覽器發過來的數據,進行相應處理后,輸出瀏覽器識別

的html文本給Web Server。為了便于理解, 還是用流程圖示意一下。

 client                   Web Server             CGI程序    
    
       http協議                         CGI接口
發送請求---->接受請求并將數據處理發送給CGI程序--->獲得處理過的數據并解析
                                               
接受數據<----獲得CGI返回的數據并發送給客戶端<---處理數據并返回html數據

            圖 1

本文討論的重點就是這個CGI接口, CGI程序通過環境變量和標準輸入獲得數據,通過標

準輸出和標準錯誤輸出發送數據,那么這個到底是怎么實現的呢?

3. CGI接口實現

其實Web Server和CGI程序就是兩個進程,要實現CGI接口就是如何實現這兩個進程的通信

,Web Server獲得瀏覽器發送過來的請求后,將數據做相應處理,然后fork一個子進程處

理客戶請求,子進程組織相應的環境變量和參數準備傳遞給CGI程序,然后調用execvp執

行CGI程序。CGI程序有自己的環境變量,就是如上實現的,第二節說過,CGI程序除了通

過環境變量獲得數據外(其實這是get方法獲取數據的手段),還通過標準輸入獲得數據(pos

t方法獲取數據的方法),并且返回的數據是發送到標準輸出。相信你和我之前有一樣的疑

問,為什么CGI程序能夠從標準輸入、標準輸出讀寫數據?其實這是通過管道和dup2系統

調用實現的,見下面的示意圖:

                               _____________________
                          dup2|                     |
(CGI program)read<-stdin<--|p[0]--管道1--p[1]|<-write (http server)
                              |_____________________|

                            圖2: CGI讀的實現
                                 _____________________
                            dup2|                     |
(CGI program)write->stdout-->|p[1]--管道2--p[0]|->read (http server)
                                |_____________________|

                            圖3: CGI寫的實現

4. 如何寫CGI程序

    有了上述的講述后,應該算基本熟悉CGI的內幕了,這樣寫起CGI程序也會得心應手,

首先獲得相應的環境變量并保存,然后就是數據處理,根據REQUEST_METHOD環境變量判斷

表單提交的方法是GET還是METHOD,如何是GET,則從QUERY_STRING里面獲取數據,如果是

POST, 那么從stdin讀取長度CONTENT_LENGTH的數據。下面就是數據處理,組織html的輸

出頁面,并用printf輸出。

5. 小結

    上面講的其實只是一個概況,關于CGI的接口有興趣的可以去看看這兩個網頁:

http://cgi-spec.golux.com/draft-coar-cgi-v11-03-clean.html 
http://hoohoo.ncsa.uiuc.edu/cgi/intro.html
    我敘述的可能有些地方也有問題,歡迎提出! 另外關于CGI實現的代碼可以看看

開源軟件"thttpd",這是一個輕量級的http server,實現的很講究,主頁在

    http://www.acme.com/software/thttpd/

  完畢!

posted on 2010-07-13 13:41 doing5552 閱讀(1071) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            99国产精品久久久久久久久久| 亚洲第一久久影院| 亚洲高清毛片| 亚洲一区免费网站| 激情欧美一区二区三区| 国产精品亚洲综合色区韩国| 久久裸体艺术| 亚洲欧洲av一区二区| 日韩特黄影片| 亚洲最新视频在线| 一区二区三区高清在线| 亚洲国产精品高清久久久| 久久最新视频| 欧美精品久久久久久久免费观看 | 亚洲国产成人精品久久久国产成人一区 | 海角社区69精品视频| 欧美尤物一区| 久久久久久国产精品一区| 久久久久久综合网天天| 美女黄色成人网| 欧美啪啪成人vr| 国产婷婷精品| 亚洲乱码国产乱码精品精 | 久久久久久成人| 欧美国产综合一区二区| 欧美黄色免费网站| 欧美图区在线视频| 国产一区二区三区网站| 99精品国产在热久久婷婷| 亚洲欧美日韩在线一区| 免费观看30秒视频久久| 999亚洲国产精| 欧美影院在线| 欧美视频国产精品| 亚洲精选在线观看| 久久久久看片| 亚洲性视频h| 国产精品免费一区豆花| 亚洲精品在线视频观看| 国产麻豆精品theporn| 亚洲国产精品毛片| 久久精品国产免费观看| 久久综合九色99| 一区二区av在线| 欧美性色aⅴ视频一区日韩精品| 久久久久久999| 国产香蕉久久精品综合网| 亚洲专区在线视频| 国产精品久久一区二区三区| 99国产精品| 亚洲国产视频一区二区| 久久综合一区二区三区| 亚洲成色最大综合在线| 亚洲电影免费在线观看| 欧美精品18| 亚洲一区二区少妇| 亚洲专区一区二区三区| 国产精品theporn88| 欧美亚洲一区二区三区| 亚洲欧美高清| 亚洲欧洲在线观看| 亚洲视频国产视频| 亚洲国产成人av好男人在线观看| 欧美激情久久久| 国产美女精品| 欧美成人精品h版在线观看| 老司机67194精品线观看| 亚洲区国产区| 中文日韩电影网站| 亚洲精品三级| 欧美一区永久视频免费观看| 久久久水蜜桃| 欧美精品福利视频| 亚洲精品国产精品乱码不99按摩| 亚洲色图综合久久| 91久久亚洲| 欧美一级电影久久| 亚洲专区欧美专区| 欧美理论在线| 亚洲精品免费在线观看| 在线观看欧美成人| 性欧美暴力猛交69hd| 亚洲一区视频在线观看视频| 欧美成人国产| 亚洲国产日韩欧美综合久久| 亚洲电影天堂av| 久久综合网络一区二区| 久久免费精品视频| 亚洲高清久久久| 欧美高清视频一区二区| 欧美激情自拍| 亚洲免费观看| 国产美女搞久久| 久久久久中文| 亚洲精品1234| 欧美一区二区三区在线免费观看| 国产精品久久久久99| 亚洲欧美另类国产| 久久精品国产在热久久| 狠狠入ady亚洲精品| 欧美精品激情| 亚洲一区二区三区午夜| 欧美 日韩 国产精品免费观看| 1024日韩| 国产精品久久99| 久久久综合香蕉尹人综合网| 亚洲久久一区| 免费在线亚洲欧美| 午夜精品视频在线观看一区二区 | 久久久最新网址| 欧美激情亚洲视频| 小嫩嫩精品导航| 在线中文字幕日韩| 亚洲国产精品久久91精品| 欧美成人亚洲成人| 欧美在线观看一区二区三区| 亚洲高清毛片| 美日韩精品视频| 欧美亚洲免费电影| 亚洲愉拍自拍另类高清精品| 亚洲日本在线观看| 亚洲黄一区二区| 黄色av成人| 在线观看久久av| 一区二区亚洲精品| 亚洲国产小视频在线观看| 一区二区亚洲精品| 亚洲国产99精品国自产| 亚洲精品少妇| 一区二区三区你懂的| 一区二区精品国产| 亚洲视频免费在线观看| 亚洲欧美一区二区在线观看| 久久成人精品无人区| 久久人人超碰| 欧美激情一区二区三区蜜桃视频| 91久久在线视频| 这里是久久伊人| 久久gogo国模啪啪人体图| 欧美88av| 国产一区二区三区久久悠悠色av | 国产精品私房写真福利视频| 欧美韩日一区二区| 亚洲香蕉在线观看| 久久三级福利| 国产精品久久久久久av下载红粉| 国产欧美日韩麻豆91| 亚洲精品在线免费观看视频| 欧美中文字幕第一页| 亚洲国产日韩一级| 久久久亚洲国产美女国产盗摄| 在线观看视频一区二区欧美日韩 | 久久精品人人做人人综合| 亚洲自拍偷拍网址| 91久久亚洲| 欧美成人午夜视频| 亚洲第一精品久久忘忧草社区| 亚洲欧美综合| 在线亚洲免费| 欧美日韩国产黄| 日韩午夜在线观看视频| 蜜月aⅴ免费一区二区三区| 亚洲一区二区在线播放| 国产精品视频自拍| 欧美一级大片在线免费观看| 妖精视频成人观看www| 欧美激情一二三区| 亚洲一区二区三区777| 亚洲一区二区精品在线| 国产精品午夜久久| 久久久人成影片一区二区三区观看| 亚洲曰本av电影| 国产综合久久久久久| 欧美chengren| 欧美视频在线观看免费网址| 欧美一区二区久久久| 久久综合久久久久88| 一区二区三区.www| 欧美一区免费视频| 99国产精品99久久久久久| 这里只有视频精品| 精品91在线| 欧美激情黄色片| 国产视频在线观看一区| 亚洲激情午夜| 亚洲人成网在线播放| 国产精品另类一区| 欧美电影在线观看完整版| 国产精品久久久99| 亚洲国产天堂久久综合网| 国产精品video| 欧美激情亚洲| 一色屋精品视频在线观看网站| 91久久国产精品91久久性色| 狠狠v欧美v日韩v亚洲ⅴ| 日韩视频在线一区二区三区| 激情六月婷婷久久| 久久精品国产亚洲a| 久久精品论坛| 国产视频在线一区二区|