一文(wén)看懂Web服務(wù)器、應用(yòng)服務(wù)器、Web容器、反向代理(lǐ)服務(wù)器

日期:

2019-04-25

浏覽次數:

0

作(zuò)者:程序君來源:Web編程開發

我們知道,不同膚色的人外貌差别很(hěn)大,而雙胞胎的辨識很(hěn)難。有意思的是Web服務(wù)器/Web容器/Web應用(yòng)程序服務(wù)器/反向代理(lǐ)有點像四胞胎,在網絡上經常一起出現。本文(wén)将帶讀者對這四個相似概念如何區(qū)分(fēn)。

一文(wén)看懂web服務(wù)器、應用(yòng)服務(wù)器、web容器、反向代理(lǐ)服務(wù)器區(qū)别與聯系

  • Web服務(wù)器概念與基本原理(lǐ)

  • Web服務(wù)器的曆史

  • Web服務(wù)器工作(zuò)原理(lǐ)

  • Web應用(yòng)程序容器概念與基本原理(lǐ)

  • Web應用(yòng)程序容器的由來

  • Web應用(yòng)程序容器的基本工作(zuò)原理(lǐ)

  • Web應用(yòng)程序服務(wù)器概念及基本原理(lǐ)

  • 反向代理(lǐ)概念與基本原理(lǐ)

反向代理(lǐ)基本概念

反向代理(lǐ)基本工作(zuò)原理(lǐ)

總結

Web服務(wù)器概念與基本原理(lǐ)

Web服務(wù)器的曆史

1989年,互聯網之父Berners-Lee向其雇主CERN提出了一個新(xīn)項目,目的是通過使用(yòng)超文(wén)本系統來緩解科(kē)學(xué)家之間的信息交流。該項目導緻Berners-Lee在1990年編寫了兩個方案:

一個名為(wèi)WorldWideWeb的浏覽器。

世界上第一個網絡服務(wù)器,後來被稱為(wèi)CERN httpd,它運行在NeXTSTEP上

在1991年至1994年期間,用(yòng)于通過萬維網沖浪和交換數據的早期技(jì )術的簡單性和有效性有助于将其移植到許多(duō)不同的操作(zuò)系統,并将其用(yòng)于科(kē)學(xué)組織和大學(xué),然後傳播到行業。

1994年,Berners-Lee決定組建萬維網聯盟(W3C),通過标準化過程來管理(lǐ)涉及的許多(duō)技(jì )術(HTTP,HTML等)的進一步發展。

就是這台服務(wù)器:

一文(wén)看懂Web服務(wù)器、應用(yòng)服務(wù)器、Web容器、反向代理(lǐ)服務(wù)器

Web服務(wù)器的主要功能(néng)是存儲,處理(lǐ)和傳遞網頁給客戶。客戶端和服務(wù)器之間的通信使用(yòng)超文(wén)本傳輸協議(HTTP)進行。交付的頁面最常見的是HTML文(wén)檔,除了文(wén)本内容之外,還可(kě)能(néng)包含圖像,樣式表和腳本。

一個用(yòng)戶代理(lǐ),通常是web浏覽器或web爬蟲,通過發起一個HTTP請求以獲取服務(wù)器資源,服務(wù)器根據請求返回該資源或由于某種原因響應錯誤消息。該資源通常是服務(wù)器輔助存儲上的真實文(wén)件,但這不一定是這種情況,取決于Web服務(wù)器的實現方式。

一文(wén)看懂Web服務(wù)器、應用(yòng)服務(wù)器、Web容器、反向代理(lǐ)服務(wù)器

雖然主要功能(néng)是提供内容,但HTTP的完整實現還包括從客戶端接收内容的方式。此功能(néng)用(yòng)于提交Web表單,包括上傳文(wén)件。許多(duō)通用(yòng)Web服務(wù)器還支持使用(yòng)Active Server Pages(ASP),PHP或其他(tā)腳本語言的服務(wù)器端腳本。這意味着Web服務(wù)器的行為(wèi)可(kě)以在單獨的文(wén)件中腳本化,而實際的服務(wù)器軟件保持不變。通常,此函數用(yòng)于動态生成HTML文(wén)檔(“即時”),而不是返回靜态文(wén)檔。前者主要用(yòng)于從數據庫檢索或修改信息。後者通常快得多(duō),并且更容易被緩存,但不能(néng)提供動态内容。

Web服務(wù)器不僅用(yòng)于為(wèi)萬維網服務(wù)。它們也可(kě)以被嵌入到諸如打印機,路由器,網絡攝像機等設備中,并且僅服務(wù)于本地網絡。然後,web服務(wù)器可(kě)以用(yòng)作(zuò)用(yòng)于監視或管理(lǐ)所讨論的設備的系統的一部分(fēn)。這通常意味着客戶端計算機上不需要安(ān)裝(zhuāng)其他(tā)軟件,因為(wèi)隻需要一個網絡浏覽器(現在大多(duō)數操作(zuò)系統都包含在内)。

Web服務(wù)器工作(zuò)原理(lǐ)

HTTP協議基于TCP協議上,是一個應用(yòng)層協議,用(yòng)于用(yòng)戶代理(lǐ)和Web服務(wù)器進行通信。Web服務(wù)器通常采用(yòng)一問一答(dá)的方式進行工作(zuò):

1、在用(yòng)戶代理(lǐ)上用(yòng)戶發起資源請求,請求内容包括但不限于:指定資源的唯一标識IRI,指明動作(zuò)類型(GET/POST/DELETE/PUT...)

2、用(yòng)戶代理(lǐ)解析用(yòng)戶輸入IRI并從中獲取目标域名,交由DNS服務(wù)器解析。如果IRI中指定某IP地址,這無需這步。

3、如果與服務(wù)器的會話還沒建立,此時先建立TCP連接,并完成HTTP協商(确定雙方均可(kě)接受的處理(lǐ)方式,包括協議版本,是否加密,内容格式等等)。

4、用(yòng)戶代理(lǐ)把請求内容封裝(zhuāng)成HTTP數據包向服務(wù)器發送。

5、服務(wù)器接收到資源請求并以之前協商好的方式解包并處理(lǐ)。

6、服務(wù)器請求的資源封裝(zhuāng)成HTTP數據包并返回給用(yòng)戶代理(lǐ)。

接下來重點說說服務(wù)器端的工作(zuò)原理(lǐ)

一文(wén)看懂Web服務(wù)器、應用(yòng)服務(wù)器、Web容器、反向代理(lǐ)服務(wù)器

TCP監聽模塊

服務(wù)器監聽某個端口(一般默認是8080端口,用(yòng)戶可(kě)以設置其他(tā)端口),以建立和用(yòng)戶代理(lǐ)之間的連接。一旦建立連接,用(yòng)戶代理(lǐ)的後續HTTP請求将不用(yòng)再進入監聽模塊。

預處理(lǐ)

此處主要做三件事:1. 從TCP報文(wén)中獲取HTTP請求報文(wén)。2. 根據和用(yòng)戶代理(lǐ)的協商進行解密,解壓,安(ān)全處理(lǐ)等等。3. 根據服務(wù)器自身的配置進行安(ān)全處理(lǐ),建立會話狀态等等。

UR路由

解析URL字符串和動作(zuò)以确定用(yòng)戶代理(lǐ)請求的資源,根據匹配規則(通常根據正則表達式+後綴)路由到靜态資源處理(lǐ)模塊或動态資源處理(lǐ)模塊。

靜态資源處理(lǐ)模塊

負責找到靜态資源,比如HTML/Javascript/CSS文(wén)件/圖片/圖像,确定内容是字符流或者字節流,并确定對應MIME,比如HTML生成MIME為(wèi)text/html的字符流,mpeg視頻文(wén)件生成MIME為(wèi)video/mpeg的字節流。

動态資源處理(lǐ)模塊

運行業務(wù)邏輯處理(lǐ),動态決定返回的資源内容和類型,内容和類型的處理(lǐ)原則同上。

後處理(lǐ)

根據和用(yòng)戶協商的協議進行加密,壓縮,安(ān)全處理(lǐ)等等。

資源輸出模塊

把處理(lǐ)好的内容和類型封裝(zhuāng)成HTTP報文(wén),往TCP連接另一頭的用(yòng)戶代理(lǐ)發送TCP報文(wén)(内容是HTTP報文(wén))。

主流Web服務(wù)器

包括Apache、IIS 、Nginx,市場占有率如下

還有比較多(duō)使用(yòng)Tomcat,Jetty,WebSphere,WebLogic,Kerstrel等等。

Web應用(yòng)程序容器概念與基本原理(lǐ)

Web應用(yòng)程序容器的由來

Web服務(wù)器的出現的标志(zhì)着WWW時代的帶來,世界變得更加平面化。當初嘗到甜頭的開創者們開始不滿足與在互聯網上獲取靜态資源,于是出現了CGI腳本來動态獲取資源。再後來網絡發展方向也是朝着增強Web服務(wù)器動态獲取資源的能(néng)力前進。以下是代表性的動态技(jì )術:

一文(wén)看懂Web服務(wù)器、應用(yòng)服務(wù)器、Web容器、反向代理(lǐ)服務(wù)器

随後Web服務(wù)器朝着企業級應用(yòng)方向發展,快速的業務(wù)變化,迫使Web開發人員面對新(xīn)的挑戰:如何快速寫出魯棒,可(kě)靠,符合業務(wù)需求的程序并順利部署?解決這個挑戰的一個有效的辦法是,創造一個Web程序開發框架(含運行環境,比如解釋執行JSP,Web API),這個框架解決魯棒性,可(kě)靠性問題,提供快速開發接口。換言之,開發人員隻需要專注于實現業務(wù)本身,如有更高的需求還可(kě)以對框架進行定制和擴展。這個框架的另外一個名字是Web應用(yòng)程序容器。

Web應用(yòng)程序容器的基本工作(zuò)原理(lǐ)

一般情況下Web應用(yòng)程序容器是以下構成體(tǐ)系:

一文(wén)看懂Web服務(wù)器、應用(yòng)服務(wù)器、Web容器、反向代理(lǐ)服務(wù)器

注:淺藍色的模塊是實現業務(wù)程序的主要使用(yòng)模塊。

相對于Web服務(wù)器,該容器新(xīn)增或強化了以下模塊:

分(fēn)配線(xiàn)程池資源

容器為(wèi)每個請求分(fēn)配一個線(xiàn)程進行處理(lǐ),通常采取線(xiàn)程池的方式高效理(lǐ)由CPU算資源。

封裝(zhuāng)Request上下文(wén)

一個請求對應一個Request上下文(wén),它主要封裝(zhuāng)了用(yòng)戶請求的主要構成:URL,HTTP請求頭,以及基于請求頭構建的Session,Cookie等對象,方便編程使用(yòng)。

封裝(zhuāng)Response上下文(wén)

一個請求對應一個Response上下文(wén),主要用(yòng)于向用(yòng)戶代理(lǐ)返回資源。可(kě)以在其中寫入輸出流,或者重定向,或者返回錯誤碼等等。

URL路由

在容器裏,運行開發人員設置不同的路由匹配規則,比如讓.HTM返回.HTML,也可(kě)以自定義.xyz返回.HTML資源。更加靈活的配置可(kě)以參考JAVA MVC或者ASP.NET MVC的配置方案。

動态資源處理(lǐ)模塊

通常在這裏具體(tǐ)的容器和開發語言都有自己的高效開發模型,比如JAVA的Servlet,ASP.NET的Web Form,MVC。

回收資源

這裏會回收剛才的線(xiàn)程資源,為(wèi)了線(xiàn)程複用(yòng),除非服務(wù)器空閑一般會将線(xiàn)程返回線(xiàn)程池。

可(kě)以看出,Web容器本身具備了做為(wèi)一個Web服務(wù)器的功能(néng),事實上通常實現Web容器功能(néng)的服務(wù)器就是一個Web服務(wù)器.比如Tomcat , IIS ,Jetty。

主流Web容器

包括Tomcat , IIS ,Jetty 。

還有比較多(duō)使用(yòng)WebSphere,WebLogic等等。

Web應用(yòng)程序服務(wù)器概念及基本原理(lǐ)

在Web服務(wù)器發展的同一個時期,應用(yòng)服務(wù)器已經存在并發展很(hěn)長(cháng)一段時間了。一些公司為(wèi)Unix開發了Tuxedo(面向事務(wù)的中間件)、TopEnd、Encina等産品,這些産品都是從類似IMS和CICS的主機應用(yòng)管理(lǐ)和監控環境衍生而來的。大部分(fēn)的這些産品都指定了“封閉的”産品專用(yòng)通信協議來互連胖客戶機(“fat” client)和服務(wù)器。在90年代,這些傳統的應用(yòng)服務(wù)器産品開始嵌入HTTP通信功能(néng),剛開始要利用(yòng)網關來實現。不久後它們之間的界線(xiàn)開始變得模糊了。

同時,web服務(wù)器越來越成熟,可(kě)以處理(lǐ)更高的負載、更多(duō)的并發和擁有更好的特性;應用(yòng)服務(wù)器開始添加越來越多(duō)的基于HTTP的通信功能(néng)。所有的這些導緻了web服務(wù)器與應用(yòng)服務(wù)器的界線(xiàn)變得更窄了。

目前,“應用(yòng)服務(wù)器”和“web服務(wù)器”之間的界線(xiàn)已經變得模糊不清了。但是人們還把這兩個術語區(qū)分(fēn)開來,作(zuò)為(wèi)強調使用(yòng)。

當有人說到“web服務(wù)器”時,你通常要把它認為(wèi)是以HTTP為(wèi)核心、web UI為(wèi)向導的應用(yòng)。當有人說到“應用(yòng)服務(wù)器”時,你可(kě)能(néng)想到“高負載、企業級特性、事務(wù)和隊列、多(duō)通道通信(HTTP和更多(duō)的協議)”。但現在提供這些需求的基本上都是同一個産品。

下圖描述一個典型的Web應用(yòng)服務(wù)器的結構圖:

一文(wén)看懂Web服務(wù)器、應用(yòng)服務(wù)器、Web容器、反向代理(lǐ)服務(wù)器

從上圖中可(kě)以看到Web應用(yòng)服務(wù)器包括了Web容器,同時内置了支撐企業應用(yòng)的事務(wù),安(ān)全,集成,通信,高可(kě)用(yòng)等等功能(néng),極大了減少了重複開發量,保障了業務(wù)系統快速開發和部署,而它本身也是一個Web服務(wù)器。Web應用(yòng)服務(wù)器可(kě)以選擇使用(yòng)大廠的WebLogic和WebSphere這種重量級産品外,也可(kě)以使用(yòng)類似與Tomcat、jetty這樣的web containner 再加上第三方的框架(spring,hibernate等)來構建自己的Application Server;.NET Core平台下可(kě)以選擇IIS, Apache,Nginx 與ASP.NET Core構建。

反向代理(lǐ)概念與基本原理(lǐ)

反向代理(lǐ)基本概念

反向代理(lǐ)是代理(lǐ)服務(wù)器的一種。它根據客戶端的請求,從後端的服務(wù)器(如Web服務(wù)器)上獲取資源,然後再将這些資源返回給客戶端。與前向代理(lǐ)不同,前向代理(lǐ)作(zuò)為(wèi)一個媒介将互聯網上獲取的資源返回給相關聯的客戶端,而反向代理(lǐ)是在服務(wù)器端(如Web服務(wù)器)作(zuò)為(wèi)代理(lǐ)使用(yòng),而不是客戶端。客戶端通過前向代理(lǐ)可(kě)以訪問很(hěn)多(duō)不同的資源,而反向代理(lǐ)是很(hěn)多(duō)客戶端都通過它訪問不同後端服務(wù)器上的資源,而不需要知道這些後端服務(wù)器的存在,而以為(wèi)所有資源都來自于這個反向代理(lǐ)服務(wù)器。

一文(wén)看懂Web服務(wù)器、應用(yòng)服務(wù)器、Web容器、反向代理(lǐ)服務(wù)器

互聯網中的請求發送給反向代理(lǐ),反向代理(lǐ)把請求轉發到内網中的服務(wù)器。

  • 反向代理(lǐ)的主要作(zuò)用(yòng)為(wèi):

  • 加密和SSL加速

  • 負載均衡

  • 緩存靜态内容

  • 壓縮

  • 減速上傳

  • 安(ān)全防火牆

  • 外網發布

  • 突破互聯網封鎖

  • 解決跨域問題

反向代理(lǐ)基本工作(zuò)原理(lǐ)

一個反向代理(lǐ)服務(wù)器的構成和處理(lǐ)過程如下圖:

一文(wén)看懂Web服務(wù)器、應用(yòng)服務(wù)器、Web容器、反向代理(lǐ)服務(wù)器

左邊淡黃色功能(néng)模塊對外網報文(wén)進行處理(lǐ),右邊灰色功能(néng)模塊針對内網報文(wén)進行處理(lǐ)

TCP監聽模塊

監聽TCP請求,這裏的請求是指報文(wén)内容是某應用(yòng)層協議(比如HTTP,FTP,EMAIL等應用(yòng)層協議)的請求。至于這裏是否會單獨産生一個線(xiàn)程來開始處理(lǐ),這個由服務(wù)器自己決定,目前最流行的是先入消息隊列然後異步處理(lǐ),這樣能(néng)極大提高代理(lǐ)的吞吐量和穩定性。

匹配被代理(lǐ)服務(wù)器

代理(lǐ)服務(wù)器根據一個表(存放外網url和内網服務(wù)器的對應關系,通常需人工進行設置),如果匹配到則繼續處理(lǐ),否則依據外網協議返回錯誤信息,比如HTTP協議這返回404。

應用(yòng)負載均衡策略

如果比較大型的互聯網應用(yòng),為(wèi)了整體(tǐ)系統穩定性,解決單點問題,需要根據自定義策略合理(lǐ)的轉發報文(wén)給被代理(lǐ)服務(wù)器。簡單的策略是哈希分(fēn)發或者随機分(fēn)發,一般可(kě)以由用(yòng)戶進行配置和選擇。

預處理(lǐ)

這裏依據協商好的外網應用(yòng)協議進行解密,安(ān)全,會話,解壓等處理(lǐ)。

新(xīn)生成網絡報文(wén)

這裏依據協商好的内網應用(yòng)協議生成網絡報文(wén),這裏可(kě)能(néng)會進行加密,安(ān)全,會話,壓縮等處理(lǐ)。

轉發給被代理(lǐ)服務(wù)器

把新(xīn)生成的網絡報文(wén)發送給内網服務(wù)器(可(kě)能(néng)是否Web服務(wù)器,Ftp服務(wù)器,郵件服務(wù)器)。

接受網絡報文(wén)

接受内網服務(wù)器反饋的網絡報文(wén)。

預處理(lǐ)

這裏依據協商好的外網應用(yòng)協議進行加密,安(ān)全,會話,壓縮等處理(lǐ)。

資源輸出模塊

這時生成滿足外網應用(yòng)協議要求的報文(wén),并發送到外網連接的另一端(用(yòng)戶代理(lǐ))。

常用(yòng)的反向代理(lǐ)服務(wù)器

它們的名字您一定記得:Ngnix,IIS,Apache。

總結

從概念上講:Web服務(wù)器是提供WWW服務(wù)的程序;Web容器是提供給開發者的框架;Web應用(yòng)程序服務(wù)器内容豐富得多(duō),既可(kě)用(yòng)各廠商通常遵循一定的工業标準并自定義擴展功能(néng)而成,也可(kě)以利用(yòng)開源組件輕量級拼裝(zhuāng)打造;反向代理(lǐ)服務(wù)器在企業級應用(yòng)中表現突出,具有解決集中式安(ān)全,負載均衡等等優點。如今這四個概念的邊界越來模糊,看看這個表就知道了:

  • 軟件名詞

  • 是否Web服務(wù)器

  • 是否Web容器

  • 是否Web應用(yòng)服務(wù)器

  • 是否能(néng)反向代理(lǐ)

  • 一文(wén)看懂Web服務(wù)器、應用(yòng)服務(wù)器、Web容器、反向代理(lǐ)服務(wù)器

關于Kerstrel是否web容器,有兩種觀點:

1. 由于Kerstrel不提供編寫應用(yòng)的框架,所以它不是容器;asp.net core才是容器,因為(wèi)它提供了開發應用(yòng)的框架并提供web應用(yòng)(MVC,Web API)運行環境。

2. Kerstrel提供了運行環境。

非常歡迎大家提出自己的有力觀點,幫助我們清晰化這個asp.net core容器概念。

聲明:本網站發布的内容(圖片、視頻和文(wén)字)以原創、轉載和分(fēn)享網絡内容為(wèi)主,如果涉及侵權請盡快告知,我們将會在第一時間删除。文(wén)章觀點不代表本網站立場,如需處理(lǐ)請聯系客服,電(diàn)話:0755-22671324。


相關新(xīn)聞

Web服務(wù)器、應用(yòng)服務(wù)器、Web容器、反向代理(lǐ)服務(wù)器
作(zuò)者:程序君來源:Web編程開發我們知道,不同膚色的人外貌差别很(hěn)大,而雙胞胎的辨...
FTP服務(wù)器和Web服務(wù)器知多(duō)少
作(zuò)者:yy來源:科(kē)技(jì )嘞服務(wù)器,也稱伺服器,是提供計算服務(wù)的設備。由于服務(wù)器需要響...