一個簡單的http伺服器的實現 含原始碼
阿新 • • 發佈:2019-02-14
EasyHttp 最簡單的http伺服器
說明:
這是一個C語言編寫的http伺服器簡單實現,使用python語言作為cgi程式處理使用者的表單輸入。通過這個專案有利於理解http服務流程,以及多執行緒除錯等諸多知識點。
使用方法:
- 平臺:centos7 編譯器:gcc 4.8.4
- 下載專案,修改htdocs目錄下easycgi.py 的執行許可權 chmod
- cd EasyHttp && make && ./httpd
- 可以通過修改 index.html 表格中的請求方式來測試get post方法
- 建議初學者通過逐步除錯的方式學習程式碼,每個函式都有詳細的註釋哦~
流程:
- 代理髮送過來請求,伺服器建立client_sock套接字,建立程序處理請求 accept_request
- 逐行從套接字中讀取http請求報文,判斷請求型別 GET \ POST 判斷 url 根據url上的引數讀取伺服器上的檔案或者準備執行cgi檔案
- 根據具體的方法 將引數儲存到 meth_env (putenv)中
- 建立子程序執行cgi程式,父程序通過管道向子程序傳入資料,從管道讀取子程序輸出的資料 父子程序通訊示意圖如下
- 該伺服器採用python編寫cgi程式
注意:
- strlen 與 sizeof的區別 如果send中使用 sizeof 很有可能由於緩衝區被佔滿導致 send 被阻塞
- 使用者的代理(瀏覽器)會檢查http的響應報文格式,所以http伺服器返回的報文一定要嚴格按照要求編寫
測試:
- 瀏覽器第一次請求到頁面
- 瀏覽器提交使用者的輸入,並返回執行結果