1. 程式人生 > >一個簡單的http伺服器的實現 含原始碼

一個簡單的http伺服器的實現 含原始碼

EasyHttp 最簡單的http伺服器

說明:

這是一個C語言編寫的http伺服器簡單實現,使用python語言作為cgi程式處理使用者的表單輸入。通過這個專案有利於理解http服務流程,以及多執行緒除錯等諸多知識點。

使用方法:

  1. 平臺:centos7 編譯器:gcc 4.8.4
  2. 下載專案,修改htdocs目錄下easycgi.py 的執行許可權 chmod
  3. cd EasyHttp && make && ./httpd
  4. 可以通過修改 index.html 表格中的請求方式來測試get post方法
  5. 建議初學者通過逐步除錯的方式學習程式碼,每個函式都有詳細的註釋哦~

流程:

  • 代理髮送過來請求,伺服器建立client_sock套接字,建立程序處理請求 accept_request
  • 逐行從套接字中讀取http請求報文,判斷請求型別 GET \ POST 判斷 url 根據url上的引數讀取伺服器上的檔案或者準備執行cgi檔案
  • 根據具體的方法 將引數儲存到 meth_env (putenv)中
  • 建立子程序執行cgi程式,父程序通過管道向子程序傳入資料,從管道讀取子程序輸出的資料 父子程序通訊示意圖如下
    父子程序通訊
  • 該伺服器採用python編寫cgi程式

注意:

  1. strlen 與 sizeof的區別 如果send中使用 sizeof 很有可能由於緩衝區被佔滿導致 send 被阻塞
  2. 使用者的代理(瀏覽器)會檢查http的響應報文格式,所以http伺服器返回的報文一定要嚴格按照要求編寫

測試:

  1. 瀏覽器第一次請求到頁面
    瀏覽器第一次請求到頁面
  2. 瀏覽器提交使用者的輸入,並返回執行結果
    瀏覽器提交使用者的輸入,並返回執行結果

參考: