自己動手開發乙個 Web 伺服器(一)

2021-07-09 18:39:29 字數 3581 閱讀 1866

《自己動手開發 web 伺服器》會分為三個部分,將介紹如何從頭開發乙個簡易 web 伺服器。我們這就開始吧。

首先,到底什麼是 web 伺服器?

http請求/響應

簡而言之,它是在物理伺服器上搭建的乙個網路連線伺服器(networking server),永久地等待客戶端傳送請求。當伺服器收到請求之後,它會生成響應並將其返回至客戶端。客戶端與伺服器之間的通訊,是以http協議進行的。客戶端可以是瀏覽器,也可以是任何支援http協議的軟體。

…瀏覽器返回「hello world""

是不是很神奇?接下來,我們來分析背後的實現原理。

首先,我們來看你所輸入的網路位址。它的名字叫url(統一資源定位符(

uniform resource locator

)),其基本結構如下:

url的基本結構

通過url,你告訴了瀏覽器它所需要發現並連線的 web 伺服器位址,以及獲取伺服器上的頁面路徑。不過在瀏覽器傳送http請求之前,它首先要與目標 web 伺服器建立tcp連線。然後,瀏覽器再通過tcp連線傳送http請求至伺服器,並等待伺服器返回http響應。當瀏覽器收到響應的時候,就會在頁面上顯示響應的內容,而在上面的例子中,瀏覽器顯示的就是「hello, world!」這句話。

那麼,在客戶端傳送請求、伺服器返回響應之前,二者究竟是如何建立起tcp連線的呢?要建立起tcp連線,伺服器和客戶端都使用了所謂的套接字(socket)。接下來,我們不直接使用瀏覽器,而是在命令列使用telnet手動模擬瀏覽器。

在執行 web 伺服器的同一臺電腦商,通過命令列開啟一次telnet會話,將需要連線的主機設定為localhost,主機的連線埠設定為8888,然後按回車鍵:

$ telnet localhost 8888

trying 127.0.0.1 …

connected to localhost.

完成這些操作之後,你其實已經與本地執行的 web 伺服器建立了tcp連線,隨時可以傳送和接收http資訊。在下面這張裡,展示的是伺服器接受新tcp連線所需要完成的標準流程。

伺服器接受tcp連線的標準流程

在上面那個telnet會話中,我們輸入get /hello http/1.1,然後按下回車:

你成功地手動模擬了瀏覽器!你手動傳送了一條http請求,然後收到了http響應。下面這幅圖展示的是http請求的基本結構:

http請求的基本結構

http請求行包括了http方法(這裡使用的是get方法,因為我們希望從伺服器獲取內容),伺服器頁面路徑(/hello)以及http協議的版本。

為了盡量簡化,我們目前實現的 web 伺服器並不會解析上面的請求,你完全可以輸入一些沒有任何意義的**,也一樣可以收到"hello, world!"響應。

在你輸入請求**並按下回車鍵之後,客戶端就將該請求傳送至伺服器了,伺服器則會解析你傳送的請求,並返回相應的http響應。

下面這張圖顯示的是伺服器返回至客戶端的http響應詳情:

http響應解析

我們來分析一下。響應中包含了狀態行http/1.1 200 ok,之後是必須的空行,然後是http響應的正文。

響應的狀態行http/1.1 200 ok中,包含了http版本、http狀態碼以及與狀態碼相對應的原因短語(reason phrase)。瀏覽器收到響應之後,會顯示響應的正文,這就是為什麼你會在瀏覽器中看到「hello, world!」這句話。

這就是 web 伺服器基本的工作原理了。簡單回顧一下: web 伺服器首先建立乙個偵聽套接字(listening socket),並開啟乙個永續迴圈接收新連線;客戶端啟動乙個與伺服器的tcp連線,成功建立連線之後,向伺服器傳送http請求,之後伺服器返回http響應。要建立tcp連線,客戶端和伺服器都使用了套接字。

現在,你已經擁有了乙個基本可用的簡易 web 伺服器,你可以使用瀏覽器或其他http客戶端進行測試。正如上文所展示的,通過telnet命令並手動輸入http請求,你自己也可以成為乙個http客戶端。

答案將在《自己動手開發 web 伺服器》系列文章的第二部分揭曉。

自己動手寫的Web伺服器《一》

背景介紹 書到用時方恨少,工作之後才知道自己的知識有多麼的困乏,學識有多麼的淺薄。好在我的程式設計師工作不那麼苦逼,每天有大把的時間讓我學我學習,經 程式設計師 的推薦,花大價錢買了一本 深入理解計算機系統 對於這本書,我的評價是 計算機知識的高品質富礦。於是我拿著這本書開始修煉內功,只恨學校沒有使...

實現乙個 web 伺服器

在 system1 上配置乙個站點 然後執行下述步驟 2 將檔案 index.html 拷貝到您的 web 伺服器的 documentroot 目錄下 3 來自於 group8.example.com 域的客戶端可以訪問此web服務 4 來自於my133t.org域的客戶端拒絕訪問此web服務 答 ...

WEB 乙個簡單的WEB伺服器

web 伺服器如何工作的?http hypertext transfer protocol 是一套計算機通過網路進行通訊的規則。計算機專家設計出http,使http客戶 如web瀏覽器 能夠從http伺服器 web伺服器 請求資訊和服務,http目前協議的版本是1.1.http是一種無狀態的協議,無...