盡管“應用程序服務器與Web 服務器”暗示了對比,但在 Internet 上,這兩種類型的服務器通常為了一個共同目的而部署在一起:滿足用戶對網站內容的請求。沒有定義 Web 服務器和應用程序服務器屬性的標準文檔,但讓我們看看這些術語是如何被普遍理解的。
一個Web服務器的基本工作是接受并滿足來自客戶端的請求從一個網站的靜態內容(HTML網頁,文件,圖像,視頻等)??蛻舳藥缀蹩偸菫g覽器或移動應用程序,請求采用超文本傳輸??協議?( HTTP ) 消息的形式,Web 服務器的響應也是如此。
一個應用程序服務器的基本工作是為其客戶提供訪問通常所說的業務邏輯,產生動態內容; 也就是說,它是轉換數據以提供業務、服務或應用程序提供的特殊功能的代碼。應用程序服務器的客戶端通常是應用程序本身,并且可以包括 Web 服務器和其他應用程序服務器。應用程序服務器與其客戶端之間的通信可能采用 HTTP 消息的形式,但這不是必需的,因為它是用于 Web 服務器與其客戶端之間的通信。許多其他協議也很流行,包括 CGI 的變體。
應用程序服務器和 Web 服務器如何協同工作?
在典型的部署中,提供靜態和動態生成內容的網站運行靜態內容的 Web 服務器和動態生成內容的應用程序服務器。反向代理和負載平衡器坐在的一個或多個web服務器和一個或多個web應用程序服務器前將通信路由到適當的服務器,首先基于內容的類型請求,然后根據所配置的負載平衡算法上。大多數負載均衡器程序也是反向代理服務器,它簡化了 Web 應用程序服務器架構。
為什么這樣問?
為什么某個東西是應用程序服務器還是 Web 服務器是個問題?這主要是由于隨著網站需求的增長,這兩種服務器的設計和使用越來越重疊。許多流行的應用程序同時充當 Web 服務器和應用程序服務器(想想 Apache HTTP Server、Express、Hapi 和 Koa)。
另一個重疊之處是一些 Web 應用程序服務器使用 HTTP 作為它們的通信協議。類似地,一些 Web 服務器最終看起來像應用程序服務器,因為它們具有內置模塊和功能,這些模塊和功能本機支持 PHP 等流行語言,或代理并將請求從 HTTP 轉換為應用程序使用的協議(例如 FastCGI)。