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

doing5552

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

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

公告

常用鏈接

留言簿(24)

我參與的團隊

最新隨筆

搜索

  •  

積分與排名

  • 積分 - 455849
  • 排名 - 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 閱讀(1068) 評論(0)  編輯 收藏 引用
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美日韩福利在线观看| 在线播放亚洲| 欧美在线影院| 欧美一区二区三区在线看 | 欧美一区观看| 欧美一区二区三区在线观看视频| 亚洲欧美三级伦理| 久久久国产精品一区| 狂野欧美一区| 欧美日韩久久精品| 国内精品久久久久久影视8| 亚洲国产精品成人va在线观看| 亚洲国产精品成人综合| 一本色道久久综合亚洲精品不| 亚洲一区精彩视频| 久久久91精品国产| 亚洲精品美女久久久久| 亚洲综合999| 久久综合久久久久88| 国产精品福利网站| 亚洲国产一区二区视频| 午夜精品福利视频| 亚洲电影免费| 香蕉av777xxx色综合一区| 久久久亚洲精品一区二区三区| 欧美黄色大片网站| 国产有码一区二区| 亚洲伊人久久综合| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲精品三级| 久热成人在线视频| 国产亚洲成人一区| 亚洲综合久久久久| 亚洲精品国产视频| 久久亚洲精品一区二区| 国产精品欧美在线| 99精品欧美一区二区蜜桃免费| 久久精品国产综合| 亚洲桃花岛网站| 欧美日韩精品二区| 亚洲精品乱码久久久久久黑人| 欧美一区二区三区成人| 一区二区三区精品久久久| 欧美jizz19性欧美| 亚洲国产精品成人久久综合一区| 欧美一级在线播放| 一区二区欧美精品| 欧美日韩在线视频一区| 日韩一区二区精品| 亚洲国产另类久久精品| 久久综合九色综合欧美狠狠| 狠狠爱www人成狠狠爱综合网| 亚洲天堂成人在线观看| 亚洲人成毛片在线播放| 蘑菇福利视频一区播放| 亚洲黑丝在线| 美女视频黄a大片欧美| 久久国产精品久久久久久电车| 一区二区三区福利| 欧美午夜电影网| 亚洲影院在线| 中日韩男男gay无套| 国产精品久久久久9999| 亚洲欧美制服另类日韩| 一区二区三区高清| 国产精品青草综合久久久久99| 亚洲一区二区三区四区视频| 9人人澡人人爽人人精品| 欧美日韩一区二区免费在线观看| 一区二区高清在线| 亚洲视频中文字幕| 国产视频一区欧美| 免费观看日韩av| 欧美国产欧美亚洲国产日韩mv天天看完整 | 欧美高清自拍一区| 裸体一区二区| 99视频国产精品免费观看| 日韩视频免费观看高清在线视频 | 先锋影音网一区二区| 国产一区视频网站| 亚洲第一区色| 欧美三级电影精品| 久久精品国产v日韩v亚洲| 久久久久久亚洲精品中文字幕| 亚洲成色www久久网站| 亚洲欧洲日夜超级视频| 欧美天天在线| 久久理论片午夜琪琪电影网| 久久久伊人欧美| 亚洲网站在线看| 午夜精品一区二区在线观看| 在线免费观看成人网| 亚洲人成久久| 国产一区二区三区最好精华液| 亚洲电影激情视频网站| 国产精品亚洲人在线观看| 欧美1区2区| 国产精品永久| 亚洲激情亚洲| 韩国视频理论视频久久| 亚洲精品在线一区二区| 国产一区二区三区黄| 亚洲精品看片| 狠狠久久综合婷婷不卡| 妖精成人www高清在线观看| 在线观看不卡| 午夜视频一区在线观看| 一区二区高清| 你懂的国产精品| 欧美在线观看日本一区| 欧美欧美全黄| 欧美成人按摩| 久久精品亚洲精品| 一片黄亚洲嫩模| 麻豆精品视频在线| 久久狠狠婷婷| 国产精品久久国产愉拍| 亚洲欧洲一区二区三区久久| 在线不卡中文字幕| 午夜亚洲影视| 性欧美1819sex性高清| 欧美日韩在线免费| 亚洲区一区二区三区| 在线免费日韩片| 久久久久九九九九| 久久久久久欧美| 国产亚洲精品久久久久婷婷瑜伽 | 久久国产天堂福利天堂| 欧美性色aⅴ视频一区日韩精品| 亚洲福利视频三区| 亚洲电影成人| 美女图片一区二区| 欧美成人高清| 亚洲国产欧美在线| 麻豆成人综合网| 欧美激情一区二区久久久| 亚洲国产精品一区二区第一页 | 欧美大片在线观看一区| 美女爽到呻吟久久久久| 黑人极品videos精品欧美裸| 欧美一区二区私人影院日本| 久久精品一区二区国产| 国产一区二区三区久久久久久久久 | 在线亚洲欧美专区二区| 一区二区三区 在线观看视| 欧美激情精品久久久久| 亚洲肉体裸体xxxx137| 一区二区91| 国产精品日韩精品欧美在线 | 亚洲午夜羞羞片| 亚洲欧美日韩另类| 国产精品久久久久久久7电影 | 免费在线观看一区二区| 影音先锋久久资源网| 免费在线日韩av| 亚洲精品免费看| 欧美一区二区视频在线| 在线欧美三区| 欧美天堂在线观看| 久久国产福利国产秒拍| 欧美激情欧美狂野欧美精品| 99在线精品视频| 国产精品久久久久久亚洲毛片| 校园春色综合网| 亚洲福利视频网| 欧美一区二区三区婷婷月色| 亚洲高清电影| 国产精品日韩一区| 久久一区中文字幕| 亚洲香蕉在线观看| 狠狠色狠狠色综合系列| 欧美大胆a视频| 亚洲在线第一页| 欧美国产日本| 性欧美大战久久久久久久免费观看 | 亚洲欧美日韩精品久久亚洲区 | 国内外成人免费激情在线视频网站 | 一本色道久久| 国产视频综合在线| 欧美激情va永久在线播放| 亚洲欧美综合一区| 亚洲黄色在线看| 久久男人av资源网站| 亚洲一区二区三区四区视频| 亚洲国产成人不卡| 国产视频在线观看一区二区三区| 欧美另类高清视频在线| 久久精品av麻豆的观看方式| 一区二区国产精品| 欧美国产一区视频在线观看| 久久爱另类一区二区小说| 夜夜嗨av一区二区三区中文字幕| 国产午夜精品久久久久久免费视| 欧美伦理影院| 欧美成人激情视频| 久久这里有精品15一区二区三区| 亚洲欧美日本国产专区一区| 99pao成人国产永久免费视频| 亚洲第一毛片| 欧美大片91|