HTTP伺服器項目

來源:互聯網
上載者:User

標籤:http

基於httpd的HTTP server

作業系統:CentOs 6.5

工具:Vim、gcc、g++、Makefile、Mysql


原始碼:https://github.com/ZhaoGuanwen/HTTP-Server


主要工作流程:

650) this.width=650;" src="http://s4.51cto.com/wyfs02/M01/88/55/wKioL1fw1I6S7TjfAAE5J3FouqI805.jpg-wh_500x0-wm_3-wmp_4-s_2304485477.jpg" title="HTTP_server主要工作流程.jpg" alt="wKioL1fw1I6S7TjfAAE5J3FouqI805.jpg-wh_50" />


所有函式宣告:

650) this.width=650;" src="http://s2.51cto.com/wyfs02/M02/88/59/wKiom1fw1oHS3V5XAADneIKG4iM079.jpg" title="http_server.h.jpg" alt="wKiom1fw1oHS3V5XAADneIKG4iM079.jpg" />


main函數:

650) this.width=650;" src="http://s1.51cto.com/wyfs02/M00/88/55/wKioL1fw1tjzHl6iAACAj0yN9F8881.jpg" title="main.jpg" alt="wKioL1fw1tjzHl6iAACAj0yN9F8881.jpg" />


當啟動伺服器時輸入的參數(要綁定HTTP服務的ip地址,連接埠號碼)錯誤時,usage函數列印出正確方法。

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/88/55/wKioL1fw2FPRU3ReAAAb0PRaeTM062.jpg" title="usage.jpg" alt="wKioL1fw2FPRU3ReAAAb0PRaeTM062.jpg" />


start_up()函數建立一個監聽通訊端,檢測是否有新的請求。

650) this.width=650;" src="http://s1.51cto.com/wyfs02/M00/88/55/wKioL1fw4iKB-zBrAACdXD5OGhw055.jpg" title="start_up.jpg" alt="wKioL1fw4iKB-zBrAACdXD5OGhw055.jpg" />


當接收到一個新的請求時,派生一個新的線程執行accept_request()函數去處理。

1. 調用get_line()函數提取請求行

2. 從請求行中提取要求方法、請求URL、請求資源的路徑

3. 判斷是否含有cgi程式

650) this.width=650;" src="http://s5.51cto.com/wyfs02/M02/88/59/wKiom1fw2iCw6u2CAA6aHkr-bAM120.jpg" title="accept_request.jpg" alt="wKiom1fw2iCw6u2CAA6aHkr-bAM120.jpg" />


get_line()函數讀取sock中的一行資料(最大長度len)到line中。

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/88/59/wKiom1fw2q2gH4EfAABlR6u11uI885.jpg" title="get_line.jpg" alt="wKiom1fw2q2gH4EfAABlR6u11uI885.jpg" />



clear_header()函數清除剩餘的頭部資訊。

650) this.width=650;" src="http://s4.51cto.com/wyfs02/M01/88/55/wKioL1fw3InSDSatAAAtj4FtJmk099.jpg" title="clear_header.jpg" alt="wKioL1fw3InSDSatAAAtj4FtJmk099.jpg" />


如果請求的資源存在並且是非cgi程式,echowww()將該資源發送給請求方。

650) this.width=650;" src="http://s1.51cto.com/wyfs02/M02/88/55/wKioL1fw3nGhWZj2AABrkFjnNYU105.jpg" title="echowww.jpg" alt="wKioL1fw3nGhWZj2AABrkFjnNYU105.jpg" />


如果請求的資源是cgi程式,exec_cgi()函數運行cgi程式,並將運行結果發送給請求方。

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/88/59/wKiom1fw4O2DYBanAA5MFfr2-58368.jpg" title="exec_cgi.jpg" alt="wKiom1fw4O2DYBanAA5MFfr2-58368.jpg" />


echo_errno()函數將錯誤碼發送給請求方

650) this.width=650;" src="http://s2.51cto.com/wyfs02/M01/88/59/wKiom1fw4pOxW5IZAABMgCvf41M291.jpg" title="echo_errno.jpg" alt="wKiom1fw4pOxW5IZAABMgCvf41M291.jpg" />


處理的錯誤碼有400(Bad Request)、404(Not Found)、405(Method Not Allowed)、500(Internal Server Error)。

650) this.width=650;" src="http://s2.51cto.com/wyfs02/M01/88/55/wKioL1fw41fCVi2RAAowi0Dk1xg834.jpg" title="errno.jpg" alt="wKioL1fw41fCVi2RAAowi0Dk1xg834.jpg" />


Makefile:

650) this.width=650;" src="http://s5.51cto.com/wyfs02/M00/88/55/wKioL1fw5IizNiEgAAZahha0H6c485.jpg" title="Makefile.jpg" alt="wKioL1fw5IizNiEgAAZahha0H6c485.jpg" />


寫一個簡單的cgi程式測試。


math_cgi.cpp

650) this.width=650;" src="http://s5.51cto.com/wyfs02/M01/88/55/wKioL1fw5XKgj5D9AAzmxBXHlu0634.jpg" title="math_cgi.cpp.jpg" alt="wKioL1fw5XKgj5D9AAzmxBXHlu0634.jpg" />

index.html

650) this.width=650;" src="http://s2.51cto.com/wyfs02/M02/88/56/wKioL1fw7-3zs0ivAABi8zeSY7Y122.jpg" title="index.jpg" alt="wKioL1fw7-3zs0ivAABi8zeSY7Y122.jpg" />



650) this.width=650;" src="http://s5.51cto.com/wyfs02/M01/88/56/wKioL1fw8Hnic4qFAACSXBWytUU786.jpg" style="float:none;" title="test1.jpg" alt="wKioL1fw8Hnic4qFAACSXBWytUU786.jpg" />

650) this.width=650;" src="http://s1.51cto.com/wyfs02/M02/88/59/wKiom1fw8HqCr0s5AAC7jZUxFQY838.jpg" style="float:none;" title="test2.jpg" alt="wKiom1fw8HqCr0s5AAC7jZUxFQY838.jpg" />


本文出自 “zgw285763054” 部落格,請務必保留此出處http://zgw285763054.blog.51cto.com/11591804/1858466

HTTP伺服器項目

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.