簡單的說,web伺服器就是機器上監聽了本地的IP和埠的一個行程,當有客戶的請求進來時,它會響應客戶的請求並傳回相應的資訊。客戶端和服務端之間的通訊基於HTTP協議,客戶端可以是瀏覽器或者任何支援HTTP的應用。我們平時訪問網頁或手機APP裡接受服務端的資料,都是透過這樣的方式。
下麵這張圖是一個客戶端和服務端互動的過程
使用者在瀏覽器輸入網址向web伺服器發出一個請求,web伺服器收到請求後傳回Hello, world!給瀏覽器,使用者就能在瀏覽器上看到文字。
我們來用Python實現這樣一個簡單的web伺服器。程式碼如下
上面的程式碼監聽本地的8888埠,收到客戶端的請求後,在控制檯打印出請求的頭部和內容,並傳迴響應的頭部和內容給客戶端。
執行上面的程式碼
開啟瀏覽器,訪問http://localhost:8888/,會在瀏覽器看到如下的頁面
同時在程式的控制檯會有如下的輸出
這就是客戶端請求的頭部資訊。
HTTP協議是TCP協議上層的協議,因此在實現HTTP互動之前,客戶端和服務端先要建立TCP連線。建立TCP連線就要用到socket模組。建立TCP連線由客戶端發起,為接受客戶端的TCP連線請求,伺服器端需要經歷以下幾步:
- 建立socket
- 呼叫bind系結到指定的IP和埠
- 呼叫listen監聽埠
- 呼叫accept接受客戶端的請求
至此一個TCP連線建立完成,接下來就可以進行資料的收發。
好了,以上就是一個最簡單的web伺服器。