Home >> Blog >> HTTP 服務器解釋

HTTP 服務器解釋

在計算中,服務器是為其他程序或設備(稱為客戶端)提供功能的計算機程序或設備。

服務器可以提供多種功能或服務,從在多個客戶端之間共享數據或資源到為客戶端執行計算。

單個服務器可以提供,或者用計算術語來說可以服務多個客戶端,並且單個客戶端可以使用多個服務器。

請求/響應模型

請求/響應模型主要用於實現客戶端/服務器系統:

客戶端向服務器發送請求,服務器執行某些操作並將響應發送回客戶端,這可能是結果或確認(如錯誤消息等)

正如我們將在下面進一步看到的,這與 HTTP 服務器所依賴的模型相同。

Web 或 HTTP 服務器的定義

Web 服務器或HTTP 服務器是使用萬維網和 HTTP(協議)實現請求/響應模型的服務器軟件(或專用於運行服務器軟件的硬件) 。

HTTP 服務器通過 HTTP 協議處理來自客戶端的傳入網絡請求,並通過 Internet 提供內容。

什麼是 HTTP 及其工作原理

HTTP 或超文本傳輸協議是一種應用層協議,用於在萬維網上虛擬傳輸文件和其他數據,無論它們是 HTML 文件、圖像文件、查詢結果還是其他任何內容。

簡單來說,

HTTP 是一種具有簡單語法的通用語言,它通過指定必須如何請求信息以及如何形成響應來“翻譯”客戶端和服務器之間的通信。

通常,HTTP 基於 TCP/IP 協議,因此它通過 TCP/IP 套接字進行

HTTP服務器做什麼

HTTP 服務器的主要功能是使用超文本傳輸協議存儲、處理網頁並將其傳送給客戶端。

客戶端,或者更好的說法是用戶代理,它是代表用戶 (通常由網絡瀏覽器表示)的軟件,通過使用 HTTP 向服務器發出對特定資源的請求來啟動通信,服務器是在計算機上運行的應用程序託管網站。

服務器提供 HTML 文件和其他內容等資源,或代表客戶端執行其他功能,並向客戶端返迴響應消息。

服務器提供的響應包含有關請求的完成狀態信息,並且還可能在其消息正文中包含請求的內容,或者在無法提供內容時顯示錯誤消息。

雖然 HTTP 服務器的主要功能是提供內容,但其實現還包括從客戶端接收內容的方式。此功能用於提交 Web 表單,包括上傳文件。

HTTP 服務器可以動態(“即時”)生成 HTML 文檔,而不是靜態返回文檔。或者它可以合併並為兩者提供服務。這些決定是根據配置選項和用 PHP 等語言編寫的程序做出的。

例如,當從數據庫中檢索或修改信息時,會動態生成文檔。靜態文檔更容易緩存並且通常可以更快地提供服務。

解釋 URL

HTTP 服務器能夠將URL或統一資源定位器的路徑組件映射到:

  • 本地文件系統資源(用於靜態請求)
  • 內部或外部程序名稱(用於動態請求)。

對於靜態請求,客戶端指定的 URL 路徑是相對於 Web 服務器根目錄的。

HTTP(靜態)請求示例(無恥地從維基百科複製)

考慮以下 URL,因為它會被客戶端請求:

http://www.example.com/path/file.html

客戶端的用戶代理將使用以下請求將其轉換為與www.example.com的連接:HTTP 1.1

GET /path/file.html HTTP/1.1
主機:www.example.com

HTTP/1.1告訴服務器請求將使用哪個版本的 HTTP。

www.example.com上的 Web 服務器會將給定的路徑附加到其根目錄的路徑中。在Apache 服務器(又名免費開源跨平台 Web 服務器,服務超過 1 億個網站)上,這通常是/home/www. 結果是本地文件系統資源:

/home/www /path/file.html

如果該文件存在,Web 服務器將讀取它並向客戶端的 Web 瀏覽器發送響應。響應將描述文件的內容並包含文件本身。它還將包含成功響應的狀態代碼:

HTTP/1.1 200 正常T

如果文件沒有退出,響應將包含一條錯誤消息和錯誤的狀態代碼:

HTTP/1.1 404 未找到

回复的第一部分是正在使用的 HTTP 版本,第二部分是錯誤代碼編號,回复的最後部分是人類可讀文本中的消息。

HTTP 服務器的負載限制

HTTP 服務器有負載限制,因為它只能處理有限數量的每個 IP 地址(和 TCP 端口)的並發客戶端連接——通常在 2 到 80,000 之間,默認情況下在 500 到 1,000 之間——而且它只能處理有限數量的請求每秒(RPS , AKA queries per second or QPS)取決於:

  • 自己的設置
  • HTTP 請求類型
  • 內容是靜態的還是動態的
  • 內容是否被緩存
  • 運行 Web 服務器的計算機操作系統的硬件和軟件限制。

當 Web 服務器接近或超過其限制時,它會變得無響應。

過載的症狀(也是直白的抄自維基百科)

Web 服務器過載的症狀是:

  • 請求被延遲(可能很長)(從 1 秒到幾百秒);
  • Web 服務器返回 HTTP 錯誤代碼,例如 500、502、503、504、408;
  • Web 服務器在返回任何內容之前拒絕或重置(中斷)TCP 連接;
  • 在極少數情況下,Web 服務器僅返回請求內容的一部分。這種行為可以被認為是一個錯誤,即使它通常是作為過載的症狀出現的。

綜上所述

我寫一篇關於 HTTP 服務器的概述博客文章是有原因的,原因是:我將在接下來的幾天左右實現一個!

閱讀——並獲得更多——關於 HTTP 服務器的知識無疑對這件大事起到了巨大的推動作用(編寫 HTTP 服務器是 8th Light 的所有學徒在某個時刻共享的一個恐懼時刻。)

我已經實現了一個EchoServer,所以我希望這將使 HTTP 服務器的實現更容易(大時代)。