如何從零寫乙個http server

時間 2021-05-12 02:19:02

1樓:「已登出」

取決於如何定義0了

//如果0是……嗯……python或者nodejs或者……

如果說是從socket開始,那麼首先我們需要TLS。當然就當我們已經做完了。

那麼基本的處理先不說,就http而言,就是就是請求,處理,響應這樣的過程。

請求的話,

http/1.0就比較簡單,就三種方法,請求頭東西也少,請求頭解析一下,直接甩給後面就好了。

http/1.1有乙個有趣的東西,keep-alive。怎麼辦呢,io復用,比如epoll,也可以利用某些io相關的sig,不過一般來說還是epoll簡單一些。

另外乙個有趣的東西是分塊。就是說我們可能會分好幾次才能收完資料。這個時候我們也要告訴後面的東西,這個玩意是分塊的。

http/2……就更有趣了。我們需要分session,乙個tcp連線會同時有幾個session,多個請求和響應會同時進行。

處理,就是……你python怎麼寫這裡還怎麼寫就好了。

響應……http/1.0就直接,響應頭,rn,響應體,網路序,content-length要對。

1.1就是分塊的問題。

2樓:

讀一下linux manual的bind, socket, listen, accept的頁面,讀一下RFC的文件,開始寫,完。

反正我們都是這麼幹的。

然後如果能夠看著這個步驟完成的話,一般的專案已經難不倒你了。

3樓:Esimorp

給我的文章打個小廣告,從TCP開始寫HTTP Server Esimorp - 知乎

新的文章發布在專欄裡面啦~ 知乎專欄

4樓:

其實Web伺服器這個東西,是個非常簡單而有趣的東西,首先你要明白HTTP協議是建立在TCP/IP協議基礎上的,其次你需要了解請求報文和響應報文的結構,了解了以上兩點,你只需要在服務端開乙個Socket,然後迴圈監聽客戶端連線,每次根據客戶端請求進行處理然後按照規範將資訊返回給客戶端就可以啦!

下面向題主推薦我使用C#純手工打磨HTTP伺服器的心得,目前實現了Get和Post以及靜態頁面解析,希望對題主的學習有幫助:

5樓:劉博

Akagi201/libuv-webserver · GitHub

前段時間用C寫了乙個, 用的非同步libuv實現, http解析用了輕量級高效能的http-parser, 推薦新手看.

乙個小問題,困惑了好久 關於HttpServletRequestWrapper的?

Intopass 這不是實現構造方法,而是因為 子類繼承父類時,必須顯式的或隱式的呼叫父類構造方法 首先要知道任何類都有構造方法,如果你不寫構造方法,編譯器會預設生成乙個無參構造方法。public class C1public classC2 public classC3 public class ...

如何從零做起自己搞乙個聖誕party?

蘇幕遮 有興趣的話你可以去看一下新青年的聖誕節聚會,相對來說還是非常不錯的。有KTV麻將房這些,去年的聖誕我們就去那裡玩過一次,體驗感很豐富。 宅sir 親手製作聖誕餐桌 為愛人製造乙份屬於聖誕節的浪漫 大家圍桌而坐,安享美食的同時,也能聊聊一整年的喜怒哀樂。而一張布置得當的餐桌,不僅能營造良好的進...

如何從零開始寫乙個簡單的遊戲引擎?

Xi Yang 你不可能只用D3D或者OpenGL,因為這只是圖形而已。遊戲引擎最起碼還有聲音 輸入裝置。實際上,通常還有網路 指令碼系統 物理系統。以上只是乙個維度。另乙個麻煩的維度是內容建立。對於乙個正經的遊戲引擎,你不大可能把內容硬編碼在程式裡,通常都是作為資料讀進來。而聲音 3D模型等等,在...