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

doing5552

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

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

公告

常用鏈接

留言簿(24)

我參與的團隊

最新隨筆

搜索

  •  

積分與排名

  • 積分 - 456264
  • 排名 - 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>
            在线国产欧美| 国内偷自视频区视频综合| 亚洲一级黄色片| 亚洲资源av| 亚洲欧洲在线一区| 亚洲欧美制服中文字幕| 日韩亚洲在线观看| 久久丁香综合五月国产三级网站| 亚洲电影在线免费观看| 亚洲一区二区三区四区五区午夜| 91久久夜色精品国产网站| 欧美日本免费| 国产精品videosex极品| 亚洲欧美欧美一区二区三区| 久久久精品一品道一区| 午夜精品久久久久久久| 欧美国产三级| 久久资源av| 国产模特精品视频久久久久 | 亚洲激情成人网| 99re66热这里只有精品4| 激情婷婷久久| 欧美一级大片在线观看| 午夜久久电影网| 欲色影视综合吧| 久久综合精品国产一区二区三区| 久久成人精品一区二区三区| 欧美日韩一区二区三区在线看 | 亚洲激情第一页| 久久蜜桃资源一区二区老牛| 狼狼综合久久久久综合网| 国产在线一区二区三区四区| 欧美激情一区| 亚洲伦理一区| 一区二区三区日韩| 欧美日韩精品免费在线观看视频| 亚洲精品视频中文字幕| 久久中文久久字幕| 欧美一区成人| 国产亚洲午夜| 久久裸体艺术| 蜜臀久久99精品久久久久久9| 国产资源精品在线观看| 欧美日韩一区在线观看视频| 久久这里只精品最新地址| 亚洲综合清纯丝袜自拍| 亚洲精品一区在线| 欧美69视频| 日韩午夜激情| 亚洲国产二区| 激情综合电影网| 国产乱码精品1区2区3区| 欧美日韩亚洲一区二区三区四区| 免费的成人av| 亚洲美女视频| 亚洲二区精品| 中日韩高清电影网| 国产一区日韩欧美| 国产精品毛片在线| 久久精品女人| 欧美中文字幕| 99re66热这里只有精品3直播| 亚洲第一区在线| 美女在线一区二区| 久久视频一区| 久久久青草青青国产亚洲免观| 亚洲国产成人午夜在线一区| 激情视频亚洲| 狠狠入ady亚洲精品| 欧美日韩福利在线观看| 欧美黄色一级视频| 欧美精品九九99久久| 欧美日韩国产精品一卡| 欧美激情欧美激情在线五月| 欧美精品二区三区四区免费看视频| 性18欧美另类| 狠狠色综合色区| 国内精品免费午夜毛片| 黑丝一区二区三区| 18成人免费观看视频| 1000部国产精品成人观看| 亚洲国产日韩美| 亚洲精品久久7777| 国产一区二区三区在线观看网站| 国产在线观看一区| 精品成人免费| 亚洲另类自拍| 影音先锋中文字幕一区| 亚洲成人中文| 日韩午夜一区| 午夜精品久久久久| 久久人人爽国产| 欧美国产精品va在线观看| 午夜精品国产更新| 久久久av毛片精品| 亚洲欧美在线一区二区| 久久国产精品99国产| 欧美mv日韩mv亚洲| 亚洲伦理自拍| 亚洲欧美成人网| 老司机午夜精品视频在线观看| 欧美国产日韩一区二区三区| 国产精品99一区| 精品成人在线| 一本到12不卡视频在线dvd| 亚洲国产高清一区二区三区| 夜夜嗨av一区二区三区网页| 欧美亚洲一区在线| 欧美高清视频在线| 一区二区三区欧美在线观看| 欧美激情第一页xxx| 美女黄网久久| 一区二区福利| 久久久亚洲一区| 欧美色中文字幕| 欧美日韩高清区| 韩国精品在线观看| 日韩午夜剧场| 老司机成人网| 亚洲一级电影| 亚洲自拍高清| 欧美成人在线免费观看| 欧美成人精品在线| 国产欧美一区在线| 国内激情久久| 亚洲午夜精品视频| 亚洲第一久久影院| 欧美一区二区啪啪| 欧美日韩另类国产亚洲欧美一级| 国产综合视频| 亚洲影院高清在线| 久久精品国产v日韩v亚洲| 欧美在线观看你懂的| 亚洲经典一区| 麻豆精品精华液| 国产一区二区中文| 亚洲资源在线观看| 亚洲精品久久久蜜桃| 日韩五码在线| 女女同性精品视频| 欧美日韩在线影院| 亚洲国产精品一区在线观看不卡 | 亚洲综合三区| 亚洲精品日本| 免费视频一区二区三区在线观看| 国产一区高清视频| 欧美一区二区三区精品| 99亚洲伊人久久精品影院红桃| 亚洲午夜激情免费视频| 欧美美女喷水视频| 亚洲美女在线观看| 亚洲国产日韩欧美在线99| 欧美一级成年大片在线观看| 日韩亚洲欧美一区二区三区| 久久免费高清视频| 亚洲中无吗在线| 国产精品va在线| 国产精品99久久久久久白浆小说| 亚洲国产一区二区三区青草影视| 久久婷婷国产综合国色天香| 好吊视频一区二区三区四区 | 亚洲天堂视频在线观看| 亚洲黄色一区二区三区| 免费人成精品欧美精品| 在线不卡欧美| 欧美mv日韩mv亚洲| 欧美成人精品在线| av不卡在线观看| 99re6这里只有精品| 欧美视频中文字幕在线| 午夜精品久久| 久久大逼视频| 亚洲国产日韩欧美在线图片| 亚洲国产色一区| 欧美日韩大片| 亚洲欧美日韩国产精品| 香蕉国产精品偷在线观看不卡| 久久国产精品毛片| 在线欧美日韩国产| 亚洲国产欧美日韩另类综合| 亚洲精品四区| 欧美日韩一区二区三区在线观看免| 中文精品视频| 亚洲性图久久| 国产午夜一区二区三区| 亚洲人成网站在线播| 亚洲精品免费一区二区三区| 欧美日韩综合网| 久久精品国产v日韩v亚洲| 久久三级福利| 中文精品一区二区三区| 欧美一区不卡| 91久久久久久国产精品| 亚洲手机在线| 伊人成人开心激情综合网| 亚洲精品久久久久| 国产啪精品视频| 暖暖成人免费视频| 国产精品久久久久久久久久免费| 91久久精品一区二区别|