HTTP系列(五) 伺服器的工作

2021-09-28 17:39:20 字數 1699 閱讀 2616

在前面的所有文章中,都是以客戶端的角度來出發的,到目前為止,我們只談到伺服器的職能就是處理請求,返回響應。但事實上,這裡面還有一些小細節需要注意,所以,本文就來談談伺服器的工作。

前面說的沒錯,伺服器就是用於處理請求,返回響應的。那麼,在這個過程裡面,可以具體的分為以下的七個步驟:

1. 建立連線 —— 接受乙個客戶端的鏈結,或者如果不希望這個客戶端建立連線,就將其關閉。

2. 接收請求 —— 從網路中讀取一條http報文

3. 處理請求 —— 對請求報文進行解釋,並採取行動(動作)

4. 訪問資源 —— 訪問報文中指定的資源

5. 構建響應 —— 建立帶有正確首部的http響應報文

6. 傳送響應 —— 將響應送給客戶端

7. 記錄事務處理過程 —— 將已完成事務有關的內容記錄在日誌中

如果客戶端已經開啟了一條到伺服器的持久連線,可以使用那條連線來傳送它的請求。否則,客戶端需要開啟一條新的到伺服器的鏈結。客戶端請求一條到web伺服器的tcp連線時,伺服器會建立連線,判斷連線的另一端是哪個客戶端,從tcp連線中將ip位址解析出來。一旦新的鏈結並接受,伺服器就會將連線新增到其現存的web伺服器連線列表中,並且監視連線上資料傳輸。伺服器可以隨意拒絕或立即關閉任一條連線,有些伺服器會因為客戶端ip位址或主機名是未認證的,或者因為它是已知的惡意客戶端而關閉連線。當然,伺服器也可以使用其他識別技術:

可以利用 「反向dns」 ,對大部分伺服器進行配置,以便將客戶端ip位址轉換成客戶端主機名。web伺服器 可以將客戶端主機名用於詳細的訪問控制和日誌記錄。但是這種方式是很浪費時間的,很多大容量的伺服器要麼會禁止主機名解析,要麼只允許對特定內容進行解析

伺服器可以通過ident協議(前提是伺服器得支援這個協議)找到http連線的使用者名稱。如果客戶端支援ident協議,就在tcp埠113 上監聽ident請求。

連線上有資料到達時,伺服器會從網路連線中讀取資料,並將請求報文中的內容解析出來。以下就是具體的解析步驟:

1. 解析請求行,查詢請求方法、指定的資源識別符號(uri)以及版本號

2. 讀取報文首部

3. 讀取請求主體(非必須)

一旦伺服器接收到請求,就可以根據方法、資源、首部以及可選的主體來進行處理,由於不同的請求方法具有不同的處理方式。

在前面也提到過,可以認為在伺服器上儲存的一切事物都是資源,所以也可以說伺服器就是資源伺服器,它們負責傳送預先建立好的內容,比如,html頁面。

描述了響應主體mime型別的content-type首部

描述了響應主體長度的content-length首部

實際報文的主體內容

伺服器將構建好的響應(可能是響應實體,也可能是乙個重定向)返回到客戶端中。對於非持久連線而言,伺服器在傳送完成整個報文以後,關閉自己一端的鏈結。

當一條http事務結束時,伺服器會在日誌檔案中新增乙個記錄來描述已執行的事務。

http協議(五)web伺服器

1 http1.1規範允許一台http伺服器搭建多個web站點。比如提供web託管服務的 商,可以用一台伺服器為多為客戶服務,也可以以每位客戶持有的網域名稱執行各自不同的 這裡利用了虛擬伺服器的功能。客戶端使用http協議訪問伺服器時,會經常採用類似www.baidu.con這樣的主機名和網域名稱 ...

http協議(五)web伺服器

1 http1.1規範允許一台http伺服器搭建多個web站點。比如提供web託管服務的 商,可以用一台伺服器為多為客戶服務,也可以以每位客戶持有的網域名稱執行各自不同的 這裡利用了虛擬伺服器的功能。客戶端使用http協議訪問伺服器時,會經常採用類似www.baidu.con這樣的主機名和網域名稱 ...

簡易的Http伺服器

該程式主要實現http伺服器最原始的響應功能,運用tcp套接字,使用單程序技術,只能在某一時間內處理乙個客戶端的請求。對於客戶端瀏覽器的請求做出兩種可能的處理,一種是網頁存在時傳送該網頁給客戶端,不存在時傳送404請求失敗警告,該程式是http伺服器的1.0版本,後續還會發實現更多功能的更高版本。f...