HTTP協議 實現乙個最簡單的HTTP伺服器

2021-09-26 10:44:19 字數 2531 閱讀 2936

1.http協議(超文字傳輸協議)是乙個應用層的協議

2.認識url

平時我們所說的**就是url

urlencode和urldecode

像/?:等這樣的字元,已經被url當作特殊意義理解了。因此這些字元不能隨便出現。比如,某個引數中需要帶有這寫特殊字元,就必須先對特殊字元進行轉義。

轉移的規則如下:將需要轉碼的字元轉為16進製制,然後從右到左,取4位(不足4位直接處理),每2位做一位,前面加上%,編碼成%xy格式。urlencode就是起的編碼作用。

urldecode就是urlencode的反過程,解碼已編碼的url字串。

3.http協議格式

3.1http請求

3.2http響應

3.3http資料的解析過程

1.獲取http頭部,(首行+頭部)

首行中包含url可以知道客戶端請求什麼資源,get請求還可以獲取到提交的資料

首行中包含的協議版本:拿到版本就可以針對不同版本的特性進行處理

2.解析頭部

可以獲取正文有多長,正文是什麼型別的資料

3.獲取正文進行處理(通常將正文交給子程序處理)

4.http的方法

get:獲取資源

post:傳輸實體主體

put:傳輸檔案

head:獲得報文頭部

delete:刪除檔案

其中最常用的就是get和post方法

5.http的狀態碼

1xx資訊性狀態碼(接受的請求正在處理)

2xx成功狀態碼(請求正常處理完畢)

3xx重定向狀態碼(需要進行附加操作以完成請求)

4xx客戶端錯誤狀態碼(伺服器無法處理請求)

5xx伺服器狀態錯誤碼(伺服器處理請求出錯)

最常見的狀態碼:比如200(ok),404(not found),403(forbidden),302(重定向),504等。

6.http常見header

7.實現乙個最簡單的http伺服器

實現乙個最簡單的http伺服器,只在ww網頁上輸出「hello world」;

#include

#include

#include

#include

#include

#include

#include

void

usage()

intmain

(int argc,

char

* ar**)

int fd =

socket

(af_inet, sock_stream,0)

;if(fd <0)

struct sockaddr_in addr;

addr.sin_family = af_inet;

addr.sin_addr.s_addr =

inet_addr

(ar**[1]

);addr.sin_port =

htons

(atoi

(ar**[2]

));int ret =

bind

(fd,

(struct sockaddr*

)&addr,

sizeof

(addr));

if(ret <0)

ret =

listen

(fd,10)

;if(ret <0)

for(;;

)char input_buf[

1024*10

]=;// 用乙個足夠大的緩衝區直接把資料讀完.

}

編譯,啟動服務,在瀏覽器中輸入http://[ip]:[port],就可以看到結果顯示在頁面上。

實現乙個簡單的HTTP

實現簡單http伺服器,在頁面顯示 hello world socket套接字程式設計中服務端 改編 include include include include include include include void usage intmain int argc,char ar int fd ...

C 實現乙個最簡單的HTTP伺服器

本文用c 實現了乙個最簡單的http伺服器類,你可以將它嵌入到自己的專案中,或者也可以閱讀 來學習關於http協議的知識。高效能的web應用一般都架設在強大的web伺服器上,例如iis,apache,和tomcat。然而,html是非常靈活的ui標記語言,也就是說任何應用和後端服務都可以提供html...

C 實現乙個最簡單的HTTP伺服器

本文用c 實現了乙個最簡單的http伺服器類,你可以將它嵌入到自己的專案中,或者也可以閱讀 來學習關於http協議的知識。背景高效能的web應用一般都架設在強大的web伺服器上,例如iis,apache,和tomcat。然而,html是非常靈活的ui標記語言,也就是說任何應用和後端服務都可以提供ht...