第五章 web服務器


各種形狀和尺寸的web服務器

web服務器可以用來表示Web服務器的軟件,也可以用來表示提供web頁面的特定設備或計算機。

web服務器實現了http和相關的tcp連接處理。負責管理web服務器提供的資源,以及對web服務器的配置、控制及擴展方面的管理。

web服務器有不同的形式。

  • 通用軟件web服務器。如apache。通用軟件web服務器都運行在標準的、有網絡功能的計算機系統上。
  • web服務器設備。是預先打包好的軟硬件解決方案。廠商會在他們選擇的計算機平臺上預先安裝好軟件服務器,並將軟件配置好。
  • 嵌入式web服務器。是要嵌入到消費類產品(如答應機或家用設備)中去的小型web服務器。

最小的Perl web服務器

實際的Web服務器會做些什麼

  • 建立連接。接受一個客戶端連接,或者如果不希望與這個客戶端建立連接,就將其關閉。
  • 接收請求。從網絡中讀取一條http請求報文。
  • 處理請求。對請求報文進行解釋,並採取行動。
  • 訪問資源。訪問報文中指定的資源。
  • 構建響應。創建帶有正確首部的http響應報文。
  • 發送響應。將響應會送給客戶端。
  • 記錄事務處理過程。將與已完成事務有關的內容記錄在一個日誌文件中。
    在這裏插入圖片描述
圖1

第一步——接受客戶端連接

  • 處理新連接。當客戶端請求一條到web服務器的tcp連接時,web服務器會建立連接。判斷連接的另一端是那個客戶端,從tcp連接中將IP解析出來。一旦新連接建立起來並被接受,服務器就會將新連接添加到其現存Web服務器連接列表中,做好監視連接上數據傳輸的準備
  • 客戶端主機名識別。有些Web服務器會因爲客戶端IP地址或主機名是未認證的而關閉連接。可以用反向dns對大部分web服務器進行配置,以便將客戶端IP地址轉換成客戶端主機名。不過,主機名查找可能會花費很長時間。
    通過ident確定客戶端用戶
    在這裏插入圖片描述
圖2

ident在組織內部可以很好地工作,但出於多種原因,在公共因特網上並不能很好地工作,原因包括:

  1. 很多客戶端PC沒有允許ident識別協議守護進程軟件。
  2. ident協議會使http事務處理產生嚴重的時延。
  3. 很多防火牆不允許ident流量進入。
  4. ident協議不安全,容易被僞造。
  5. ident協議不支持虛擬IP地址
  6. 暴露客戶端的用戶名還涉及隱私問題。

第二步——接收請求報文

解析請求報文時,web服務器會:

  • 解析請求行,查找請求方法、制定的資源標識符、版本號。
  • 報文首部
  • 讀取請求主體

在這裏插入圖片描述

圖3

Web服務器需要從網絡中讀取數據,將部分報文數據臨時存儲在內存中,知道收到足以進行解析的數據並理解其意義爲止。

第三步——處理請求

一旦web服務器收到了請求,就可以根據方法、資源、首部和可選的主體部分來對資源進行處理了。

第四步——對資源的映射及訪問、

web服務器是資源服務器。它負責發送原先創建好的內容(靜態資源)以及運行在服務器上的資源生成程序所產生的動態內容。

dcroot,document root。通常web服務器的文件系統中會有一個特殊的文件夾專門用於存放Web內容,我們稱爲根目錄
虛擬託管的docroot。虛擬託管的web服務器會在同一臺web服務器上提供多個web站點,每個站點在服務器上都有自己獨有的文檔根目錄。虛擬託管的web服務器會根據URI或host首部的ip地址或主機名來識別正確的文檔根目錄。

在這裏插入圖片描述

圖4

用戶的主目錄。Web服務器上爲人們提供私有的Web站點,通常會吧那些以斜槓和波浪號(/~)開始,後面跟着用戶名的URl映射爲此用戶的私有根目錄。私有docroot通常都是用戶主目錄下的那個名叫public_html的根目錄。
在這裏插入圖片描述

圖5

目錄列表。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漲

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章