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...