首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 實現簡易 HTTP Web 服務器(一):HTTP 協議原理與請求響應流程

     編輯:關於C語言

HTTP 協議工作流程

  1. 連接:瀏覽器與服務器建立 TCP 連接,創建 Socket(套接字)。
  2. 請求:瀏覽器發送請求行(如 GET /path/file HTTP/1.0)及頭部。
  3. 響應:服務器處理請求,返回狀態行、頭部、空行、實體內容。
  4. 關閉:雙方關閉連接(HTTP/1.0 默認短連接)。

常見請求方法

關鍵響應頭

  • HTTP/1.0 200 OK:狀態行,版本+狀態碼+描述。
  • Content-Type: text/html:實體 MIME 類型,瀏覽器據此渲染。
  • Content-Length: 1234:實體字節長度,瀏覽器據此讀取完整內容。
  • Server: CustomServer:服務器標識。

響應報文結構示例


HTTP/1.0 200 OK
Server: CustomCSharpServer
Content-Type: text/html
Content-Length: 567

Hello World

頭部與體之間以 空行(CRLF CRLF) 分隔。

實現簡易服務器步驟

  1. 創建 TcpListener 監聽端口(如 8080)。
  2. 循環 AcceptSocket 獲取客戶端 Socket。
  3. 接收請求數據,解析方法與路徑。
  4. 若 GET,映射虛擬路徑至物理文件。
  5. 文件存在 → 讀取字節 → 發送 200 響應頭 + 文件內容。
    不存在 → 發送 404 響應頭 + 錯誤頁面。
  6. 關閉 Socket,繼續下一個連接。

代碼架構預覽


class MyWebServer
{
    TcpListener listener;
    void Start() { listener.Start(); Thread t = new Thread(ListenLoop); t.Start(); }
    void ListenLoop() { while(true) { Socket s = listener.AcceptSocket(); HandleRequest(s); } }
    void HandleRequest(Socket s) { /* 接收、解析、響應 */ }
    void SendHeader(Socket s, string httpVer, string mime, int length, string status) { /* 發送頭部 */ }
    void SendBody(Socket s, byte[] data) { s.Send(data); }
}

下一篇預告

下一篇將給出生產級可運行的完整代碼,包含虛擬目錄配置、MIME 映射、異常處理、編譯測試步驟。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
方法用途攜帶數據方式
GET獲取資源URL 查詢字符串
POST提交數據請求體
HEAD僅獲取頭部無實體