文章目錄
各種形狀和尺寸的web服務器
web服務器可以用來表示Web服務器的軟件,也可以用來表示提供web頁面的特定設備或計算機。
web服務器實現了http和相關的tcp連接處理。負責管理web服務器提供的資源,以及對web服務器的配置、控制及擴展方面的管理。
web服務器有不同的形式。
- 通用軟件web服務器。如apache。通用軟件web服務器都運行在標準的、有網絡功能的計算機系統上。
- web服務器設備。是預先打包好的軟硬件解決方案。廠商會在他們選擇的計算機平臺上預先安裝好軟件服務器,並將軟件配置好。
- 嵌入式web服務器。是要嵌入到消費類產品(如答應機或家用設備)中去的小型web服務器。
最小的Perl web服務器
實際的Web服務器會做些什麼
- 建立連接。接受一個客戶端連接,或者如果不希望與這個客戶端建立連接,就將其關閉。
- 接收請求。從網絡中讀取一條http請求報文。
- 處理請求。對請求報文進行解釋,並採取行動。
- 訪問資源。訪問報文中指定的資源。
- 構建響應。創建帶有正確首部的http響應報文。
- 發送響應。將響應會送給客戶端。
- 記錄事務處理過程。將與已完成事務有關的內容記錄在一個日誌文件中。
第一步——接受客戶端連接
- 處理新連接。當客戶端請求一條到web服務器的tcp連接時,web服務器會建立連接。判斷連接的另一端是那個客戶端,從tcp連接中將IP解析出來。一旦新連接建立起來並被接受,服務器就會將新連接添加到其現存Web服務器連接列表中,做好監視連接上數據傳輸的準備。
- 客戶端主機名識別。有些Web服務器會因爲客戶端IP地址或主機名是未認證的而關閉連接。可以用反向dns對大部分web服務器進行配置,以便將客戶端IP地址轉換成客戶端主機名。不過,主機名查找可能會花費很長時間。
通過ident確定客戶端用戶。
ident在組織內部可以很好地工作,但出於多種原因,在公共因特網上並不能很好地工作,原因包括:
- 很多客戶端PC沒有允許ident識別協議守護進程軟件。
- ident協議會使http事務處理產生嚴重的時延。
- 很多防火牆不允許ident流量進入。
- ident協議不安全,容易被僞造。
- ident協議不支持虛擬IP地址
- 暴露客戶端的用戶名還涉及隱私問題。
第二步——接收請求報文
解析請求報文時,web服務器會:
- 解析請求行,查找請求方法、制定的資源標識符、版本號。
- 報文首部
- 讀取請求主體
Web服務器需要從網絡中讀取數據,將部分報文數據臨時存儲在內存中,知道收到足以進行解析的數據並理解其意義爲止。
第三步——處理請求
一旦web服務器收到了請求,就可以根據方法、資源、首部和可選的主體部分來對資源進行處理了。
第四步——對資源的映射及訪問、
web服務器是資源服務器。它負責發送原先創建好的內容(靜態資源)以及運行在服務器上的資源生成程序所產生的動態內容。
dcroot,document root。通常web服務器的文件系統中會有一個特殊的文件夾專門用於存放Web內容,我們稱爲根目錄。
虛擬託管的docroot。虛擬託管的web服務器會在同一臺web服務器上提供多個web站點,每個站點在服務器上都有自己獨有的文檔根目錄。虛擬託管的web服務器會根據URI或host
首部的ip地址或主機名來識別正確的文檔根目錄。
用戶的主目錄。Web服務器上爲人們提供私有的Web站點,通常會吧那些以斜槓和波浪號(/~)開始,後面跟着用戶名的URl映射爲此用戶的私有根目錄。私有docroot通常都是用戶主目錄下的那個名叫public_html
的根目錄。
目錄列表。Web服務器可以接手對目錄URL的請求,其路徑解析爲一個目錄。可以配置Web服務器對這個請求的動作。
- 返回一個錯誤。
- 不返回目錄,返回一個默認的索引文件。一般爲index.html。
- 掃描頁面,返回一個包含目錄內容的HTML頁面。
動態內容資源的映射。服務器收到一條帶有可執行路徑組件的URI的請求時,會試着去執行相應服務器目錄中的程序。
第五步——構建響應
響應報文中包含:
- 響應狀態碼
- 響應首部
- 響應主體(可能沒有)
如果有響應主體,響應報文通常包括:
- content-Type首部。描述響應主體mime類型。
- content-Length首部。描述響應主體長度。
- 實際報文的主體內容。
重定向。web服務器有時會返回重定向而不是成功的報文。響應重定向有3xx說明。Location
響應首部包含了內容的新地址或優選地址的URI。
第六步——發送響應
發送響應報文時需要注意持久連接與非持久連接
- 非持久連接。server發送完整個報文之後要關閉自己這一端的連接。
- 持久連接。連接可能仍保持打開狀態,server需要正確地計算content-length首部,不然客戶端不知道響應什麼時候結束
第七步——記錄日誌
當事務結束時,Web服務器會在日誌文件中添加一個條目,來描述已執行的失誤。
總結
一個http連接會做什麼。
- 建立連接。接受一個客戶端連接,或者如果不希望與這個客戶端建立連接,就將其關閉。
- 接收請求。從網絡中讀取一條http請求報文。
- 處理請求。對請求報文進行解釋,並採取行動。
- 訪問資源。訪問報文中指定的資源。
- 構建響應。創建帶有正確首部的http響應報文。
- 發送響應。將響應會送給客戶端。
- 記錄事務處理過程。將與已完成事務有關的內容記錄在一個日誌文件中。
參考文獻
《http權威指南》第5漲