溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Tcp協(xié)議怎么實現(xiàn)HTTP服務器

發(fā)布時間:2021-08-07 16:04:57 來源:億速云 閱讀:696 作者:chen 欄目:服務器

這篇文章主要講解了“Tcp協(xié)議怎么實現(xiàn)HTTP服務器”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Tcp協(xié)議怎么實現(xiàn)HTTP服務器”吧!

本篇文章主要介紹go語言基于tcp協(xié)議實現(xiàn)簡單的http服務器,大家可以學習到:

1.怎樣實現(xiàn)一個簡單的http服務器

2.通過錯誤的http協(xié)議格式加深對http協(xié)議的理解

平時我們使用的http服務器,如:apache、nginx都是一個完整而且功能強大的服務器,如果我們不去看源碼無法很好地理解http服務器的內部實現(xiàn)。如果我們不去自己實現(xiàn)一個簡單的http服務器,可能就無法很好地理解http協(xié)議,我們學習應該不僅要知其然還要知其所以然。

本篇文章從tcp協(xié)議開始介紹,之后使用tcp  socket按照http協(xié)議格式發(fā)送數(shù)據(jù)到客戶端,這里的客戶端指的就是瀏覽器。

傳輸控制協(xié)議(TCP,Transmission Control Protocol)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。

tcp協(xié)議屬于傳輸層協(xié)議,http協(xié)議屬于應用層協(xié)議,http協(xié)議位于tcp協(xié)議之上,也是http協(xié)議是基于tcp協(xié)議實現(xiàn)的。很多應用層協(xié)議都是基于tcp協(xié)議實現(xiàn)的,如:文件傳輸協(xié)議ftp、ssh協(xié)議、telenet協(xié)議等。

下面開始我們的編程之旅!

首先監(jiān)聽本地tcp 8888端口

listen, err := net.Listen("tcp", "127.0.0.1:8888")

之后打印監(jiān)聽信息

fmt.Println("server start listening on port 8888")

接著延時關閉tcp流

defer listen.Close()

之后for循環(huán)進入監(jiān)聽,如果有連接進來啟動goroutine進行處理

Tcp協(xié)議怎么實現(xiàn)HTTP服務器

go

接著我們來看下handleClient函數(shù)的實現(xiàn)

Tcp協(xié)議怎么實現(xiàn)HTTP服務器

go

handleClient函數(shù)里面首先定義了響應體,打印響應體的長度。之后定義響應頭,響應頭以“HTTP/1.1 200  OK\n”開始,這是http協(xié)議的標準響應頭,之后定義響應類型和響應體的長度。響應頭和響應體之間以“\n\r\n”分割。

最后以字節(jié)格式發(fā)送給瀏覽器。

下面我們來看下執(zhí)行效果吧!在瀏覽器中輸入

http://127.0.0.1:8888/
Tcp協(xié)議怎么實現(xiàn)HTTP服務器

瀏覽器

可以看到瀏覽器中顯示出我們啟動的服務器返回的數(shù)據(jù)。Response Headers中的響應頭正是我們設置的。

恭喜你,完成了自己的http服務器!

但是凡事我們要舉一反三,我們再來試一下如果http狀態(tài)是500時,返回的結果是什么?

Tcp協(xié)議怎么實現(xiàn)HTTP服務器

http

Tcp協(xié)議怎么實現(xiàn)HTTP服務器

瀏覽器

這個http 500就是我們在開發(fā)中經(jīng)常遇到的,現(xiàn)在我們自己模擬實現(xiàn)了。

我們可以嘗試去掉響應頭和響應體之間的分隔符

Tcp協(xié)議怎么實現(xiàn)HTTP服務器

http

我們看下結果

Tcp協(xié)議怎么實現(xiàn)HTTP服務器

瀏覽器

結果是瀏覽器無法識別,這就是為什么會有http協(xié)議,先規(guī)定協(xié)議各家瀏覽器按照協(xié)議實現(xiàn),這樣就不會出現(xiàn)問題。

感謝各位的閱讀,以上就是“Tcp協(xié)議怎么實現(xiàn)HTTP服務器”的內容了,經(jīng)過本文的學習后,相信大家對Tcp協(xié)議怎么實現(xiàn)HTTP服務器這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI