WEB服務器概述
Web服務器就是可以接收HTTP請求,然后將響應返回給客戶端的軟件或設備。Web服務器實現了HTTP協議、管理着Web資源,並負責提供Web服務器的管理功能(配置、控制、擴展等),由於Web服務器主要與HTTP通信打交道,所以有時候我們也將其稱作HTTP服務器,對應的,客戶端瀏覽器可以稱作為HTTP客戶端。
Web服務器基本工作流程
-
建立連接:由於HTTP通信是基於TCP協議的,所以需要先建立連接才能開始通信,這也是為什么我們在實現web服務器的時候要指定IP和端口的原因,客戶端可以根據這個IP地址和端口號與服務器建立連接(TCP的三次握手);
-
接收請求:一旦服務器與客戶端建立連接后,服務器就可以接收從客戶端發過來的請求報文,第一次請求時先建立連接,對於 HTTP/1.1 來說,默認支持持續連接,所以后續請求都可以在這個連接上進行,不需要額外建立連接;
-
處理請求:服務器收到請求報文並解析完成后(主要是請求首部),會對請求進行處理,比如POST請求需要包含請求實體,判斷是否有訪問權限,指定路徑是否存在,返回緩存還是原始資源,如果是靜態資源的話(比如 HTML、圖片、CSS 文件等)直接從文件系統獲取並返回即可,如果是動態資源的話,還需要通過 CGI 網關請求后端應用程序接口(PHP、Java、Python 等編寫的應用程序),如果配置了負載均衡,還要將請求進行轉發;
-
訪問資源:服務器根據請求處理結果去指定位置獲取資源,如果資源存儲在緩存中從緩存獲取,存儲在文件系統中從文件系統獲取,存儲在 CDN 中從 CDN 處獲取,存儲在數據庫中則從數據庫獲取等;
-
構建響應:請求處理完成並獲取到對應的資源后,服務器開始構建響應報文,響應首部和響應實體的設置需要遵循 HTTP 協議規范;
-
返回響應:響應報文構建完成后,會沿着請求來路將其返回給客戶端,如果當前 HTTP 連接是持久連接的話,需要保持連接打開狀態,否則會關閉連接,此時,需要注意的是對持久連接而言,響應頭中必須包含 Content-Length 首部字段,否則客戶端不知道什么時候響應實體結束;
-
記錄日志:當一個 HTTP 事務(請求響應)結束后,Web 服務器通常會在日志中記錄該事務。