在寫http伺服器之前,我們首先要來了解一下http協議
在講http協議之前,我們先來說說url
(一)url:
url就是我們平時俗稱的「**」
網際網路上的每個檔案都有乙個唯一的url,它包含的資訊指出檔案的位置以及瀏覽器應該怎麼處理它。
基本url包含模式(或稱協議)、伺服器名稱(或ip位址)、路徑和檔名,如「協議://授權/路徑?查詢」。完整的、帶有授權部分的普通統一資源標誌符語法看上去如下:協議://使用者名稱:密碼@子網域名稱.網域名稱.頂級網域名稱:埠號/目錄/檔名.檔案字尾?引數=值#標誌
(二)http請求
首先我們先來簡單了解一下http請求的格式
htpp請求分為四個部分:
一般情況下post請求會將引數放在正文部分,同時會在hander部分通過content_length來告訴伺服器正文部分的大小;get請求會將引數放在url中,引數之間都是通過&隔離開的
接著我們再來看看http響應的格式
(三)http請求方法
http定義了伺服器與客戶端之間的互動方式,最常見的get,post請求,以及put,delate等
(四)http狀態碼
常見的狀態碼有,比如200(ok),404(not found),403(forbidden),302(redirect,重定向)等等
(五)http常見的hander欄位
content-type:資料型別(text/html等)
伺服器在給客戶端做回應的時候,必須要告訴客戶端資料的格式是什麼,content-type屬性就是用來標識資料格式的
content-length:正文長度,用來告訴伺服器正文部分大小
以上就是關於http協議的基本, 是自己編寫http伺服器的基礎
自己手動寫http伺服器(2)
1 tringbuilder response new stringbuilder 2 1 http協議版本 狀態 描述4 2 響應頭 response head 8 正文長度 位元組長度 10 3 正文之前 1112 4 正文 1314 15system.out.println responsec...
自己寫Http伺服器(四)新增執行緒池
在我們伺服器之前的那部分,我們通過建立執行緒讓執行緒去處理任務,從而可以在同一時間可以處理多個請求,但是這樣則需要我們頻繁的建立 銷毀執行緒,這樣在一定程度上會產生資源的損耗,影響我們伺服器的效率,其次如果短時間內的大量請求,導致伺服器建立執行緒數量過多,可能導致記憶體達到極限,影響作業系統中其他重...
自己動手寫http伺服器 執行緒池(一)
建立乙個執行緒池,每有乙個連線物件就將它新增到工作佇列中,執行緒池中的執行緒通過競爭來取得任務並執行它 它是通過訊號量實現的 filename threadpool.h ifndef threadpool h define threadpool h include include include i...