偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

徹底吃透Web服務(wù)器,Web容器,Web應(yīng)用程序服務(wù)器與反向代理

企業(yè)動(dòng)態(tài)
我們知道,不同膚色的人外貌差別很大,而雙胞胎的辨識(shí)很難。有意思的是 Web 服務(wù)器/Web 容器/Web 應(yīng)用程序服務(wù)器/反向代理有點(diǎn)像四胞胎,在網(wǎng)絡(luò)上經(jīng)常一起出現(xiàn)。本文將對(duì)這四個(gè)概念進(jìn)行區(qū)分。

 我們知道,不同膚色的人外貌差別很大,而雙胞胎的辨識(shí)很難。有意思的是 Web 服務(wù)器/Web 容器/Web 應(yīng)用程序服務(wù)器/反向代理有點(diǎn)像四胞胎,在網(wǎng)絡(luò)上經(jīng)常一起出現(xiàn)。本文將對(duì)這四個(gè)概念進(jìn)行區(qū)分。

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

Web 服務(wù)器的歷史

1989 年,互聯(lián)網(wǎng)之父 Berners-Lee 向其雇主 CERN 提出了一個(gè)新項(xiàng)目,目的是通過(guò)使用超文本系統(tǒng)來(lái)緩解科學(xué)家之間的信息交流。

該項(xiàng)目導(dǎo)致 Berners-Lee 在 1990 年編寫了兩個(gè)方案:

  • 一個(gè)名為 World Wide Web 的瀏覽器。
  • 網(wǎng)絡(luò)服務(wù)器后來(lái)被稱為 CERN httpd,它運(yùn)行在 NeXTSTEP 上在 1991 年至 1994 年期間,用于通過(guò)萬(wàn)維網(wǎng)沖浪和交換數(shù)據(jù)的早期技術(shù)的簡(jiǎn)單性和有效性有助于將其移植到許多不同的操作系統(tǒng),并將其用于科學(xué)組織和大學(xué),然后傳播到行業(yè)。

1994 年,Berners-Lee 決定組建萬(wàn)維網(wǎng)聯(lián)盟(W3C),通過(guò)標(biāo)準(zhǔn)化過(guò)程來(lái)管理涉及的許多技術(shù)(HTTP,HTML 等)的進(jìn)一步發(fā)展。

就是這臺(tái)服務(wù)器:

[[265111]]

 

Web 服務(wù)器的主要功能是存儲(chǔ),處理和傳遞網(wǎng)頁(yè)給客戶。客戶端和服務(wù)器之間的通信使用超文本傳輸協(xié)議(HTTP)進(jìn)行。

交付的頁(yè)面最常見(jiàn)的是 HTML 文檔,除了文本內(nèi)容之外,還可能包含圖像,樣式表和腳本。

一個(gè)用戶代理,通常是 Web 瀏覽器或 Web 爬蟲,通過(guò)發(fā)起一個(gè) HTTP 請(qǐng)求以獲取服務(wù)器資源,服務(wù)器根據(jù)請(qǐng)求返回該資源或由于某種原因響應(yīng)錯(cuò)誤消息。

該資源通常是服務(wù)器輔助存儲(chǔ)上的真實(shí)文件,但這不一定是這種情況,取決于 Web 服務(wù)器的實(shí)現(xiàn)方式。

 

雖然主要功能是提供內(nèi)容,但 HTTP 的完整實(shí)現(xiàn)還包括從客戶端接收內(nèi)容的方式。此功能用于提交 Web 表單,包括上傳文件。

許多通用 Web 服務(wù)器還支持使用 Active Server Pages(ASP),PHP 或其他腳本語(yǔ)言的服務(wù)器端腳本。

這意味著 Web 服務(wù)器的行為可以在單獨(dú)的文件中腳本化,而實(shí)際的服務(wù)器軟件保持不變。

通常,此函數(shù)用于動(dòng)態(tài)生成 HTML 文檔(“即時(shí)”),而不是返回靜態(tài)文檔。前者主要用于從數(shù)據(jù)庫(kù)檢索或修改信息;后者通??斓枚?,并且更容易被緩存,但不能提供動(dòng)態(tài)內(nèi)容。

Web 服務(wù)器不僅用于為萬(wàn)維網(wǎng)服務(wù)。它們也可以被嵌入到諸如打印機(jī),路由器,網(wǎng)絡(luò)攝像機(jī)等設(shè)備中,并且僅服務(wù)于本地網(wǎng)絡(luò)。

然后,Web 服務(wù)器可以用于監(jiān)視或管理所討論的設(shè)備的系統(tǒng)的一部分。

這通常意味著客戶端計(jì)算機(jī)上不需要安裝其他軟件,因?yàn)橹恍枰粋€(gè)網(wǎng)絡(luò)瀏覽器(現(xiàn)在大多數(shù)操作系統(tǒng)都包含在內(nèi))。

Web 服務(wù)器工作原理

HTTP 協(xié)議基于 TCP 協(xié)議上,是一個(gè)應(yīng)用層協(xié)議,用于用戶代理和 Web 服務(wù)器進(jìn)行通信。

Web 服務(wù)器通常采用一問(wèn)一答的方式進(jìn)行工作:

  • 在用戶代理上用戶發(fā)起資源請(qǐng)求,請(qǐng)求內(nèi)容包括但不限于:指定資源的標(biāo)識(shí) URI,指明動(dòng)作類型(GET/POST/DELETE/PUT…)
  • 用戶代理解析用戶輸入 URI 并從中獲取目標(biāo)域名,交由 DNS 服務(wù)器解析。如果 URI 中指定某 IP 地址,就無(wú)需這步。
  • 如果與服務(wù)器的會(huì)話還沒(méi)建立,此時(shí)先建立 TCP 連接,并完成 HTTP 協(xié)商(確定雙方均可接受的處理方式,包括協(xié)議版本,是否加密,內(nèi)容格式等等)。
  • 用戶代理把請(qǐng)求內(nèi)容封裝成 HTTP 數(shù)據(jù)包向服務(wù)器發(fā)送。
  • 服務(wù)器接收到資源請(qǐng)求并以之前協(xié)商好的方式解包并處理。
  • 服務(wù)器請(qǐng)求的資源封裝成 HTTP 數(shù)據(jù)包并返回給用戶代理。

接下來(lái)重點(diǎn)說(shuō)說(shuō)服務(wù)器端的工作原理,如下圖:

 

TCP 監(jiān)聽(tīng)模塊:服務(wù)器監(jiān)聽(tīng)某個(gè)端口(一般默認(rèn)是 8080 端口,用戶可以設(shè)置其他端口),以建立和用戶代理之間的連接。一旦建立連接,用戶代理的后續(xù) HTTP 請(qǐng)求將不用再進(jìn)入監(jiān)聽(tīng)模塊。

預(yù)處理:此處主要做三件事,從 TCP 報(bào)文中獲取 HTTP 請(qǐng)求報(bào)文,根據(jù)和用戶代理的協(xié)商進(jìn)行解密,解壓,安全處理等等。根據(jù)服務(wù)器自身的配置進(jìn)行安全處理,建立會(huì)話狀態(tài)等等。

UR 路由:解析 URL 字符串和動(dòng)作以確定用戶代理請(qǐng)求的資源,根據(jù)匹配規(guī)則(通常根據(jù)正則表達(dá)式+后綴)路由到靜態(tài)資源處理模塊或動(dòng)態(tài)資源處理模塊。

靜態(tài)資源處理模塊:負(fù)責(zé)找到靜態(tài)資源,比如 HTML/JavaScript/CSS 文件/圖片/圖像,確定內(nèi)容是字符流或者字節(jié)流,并確定對(duì)應(yīng) MIME。

比如 HTML 生成 MIME 為 text/html 的字符流,mpeg 視頻文件生成 MIME 為 video/mpeg 的字節(jié)流。

動(dòng)態(tài)資源處理模塊:運(yùn)行業(yè)務(wù)邏輯處理,動(dòng)態(tài)決定返回的資源內(nèi)容和類型,內(nèi)容和類型的處理原則同上。

后處理:根據(jù)和用戶協(xié)商的協(xié)議進(jìn)行加密,壓縮,安全處理等等。

資源輸出模塊:把處理好的內(nèi)容和類型封裝成 HTTP 報(bào)文,往 TCP 連接另一頭的用戶代理發(fā)送 TCP 報(bào)文(內(nèi)容是 HTTP 報(bào)文)。

主流 Web 服務(wù)器

包括 Apache、IIS 、Nginx 市場(chǎng)占有率如下圖:

 

還有比較多使用 Tomcat,Jetty,WebSphere,WebLogic,Kerstrel 等等。

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

Web 應(yīng)用程序容器的由來(lái)

Web 服務(wù)器的出現(xiàn)標(biāo)志著 WWW 時(shí)代的到來(lái),世界變得更加平面化。當(dāng)初嘗到甜頭的開創(chuàng)者們開始不滿足于在互聯(lián)網(wǎng)上獲取靜態(tài)資源,于是出現(xiàn)了 CGI 腳本來(lái)動(dòng)態(tài)獲取資源。

再后來(lái)網(wǎng)絡(luò)發(fā)展方向也是朝著增強(qiáng) Web 服務(wù)器動(dòng)態(tài)獲取資源的能力前進(jìn)。以下是代表性的動(dòng)態(tài)技術(shù):

 

Web 應(yīng)用程序容器的基本工作原理

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

 

注:淺藍(lán)色的模塊是實(shí)現(xiàn)業(yè)務(wù)程序的主要使用模塊

相對(duì)于 Web 服務(wù)器,該容器新增或強(qiáng)化了以下模塊:

  • 分配線程池資源,容器為每個(gè)請(qǐng)求分配一個(gè)線程進(jìn)行處理,通常采取線程池的方式高效率由 CPU 算資源。
  • 封裝 Request 上下文,一個(gè)請(qǐng)求對(duì)應(yīng)一個(gè) Request 上下文,它主要封裝了用戶請(qǐng)求的主要構(gòu)成。

URL,HTTP 請(qǐng)求頭,以及基于請(qǐng)求頭構(gòu)建的 Session,Cookie 等對(duì)象,方便編程使用。

  • 封裝 Response 上下文,一個(gè)請(qǐng)求對(duì)應(yīng)一個(gè) Response 上下文,主要用于向用戶代理返回資源??梢栽谄渲袑懭胼敵隽鳎蛘咧囟ㄏ?,或者返回錯(cuò)誤碼等等。
  • URL 路由,在容器里,運(yùn)行開發(fā)人員設(shè)置不同的路由匹配規(guī)則,比如讓 .HTM 返回 .HTML,也可以自定義 .xyz 返回 .HTML 資源。更加靈活的配置可以參考 Java MVC 或者 ASP.NET MVC 的配置方案。
  • 動(dòng)態(tài)資源處理模塊,通常在這里具體的容器和開發(fā)語(yǔ)言都有自己的高效開發(fā)模型,比如 Java 的 Servlet,ASP.NET 的 Web Form,MVC。
  • 回收資源,這里會(huì)回收剛才的線程資源,為了線程復(fù)用,除非服務(wù)器空閑一般會(huì)將線程返回線程池。

可以看出,Web 容器本身具備了做為一個(gè) Web 服務(wù)器的功能,事實(shí)上通常實(shí)現(xiàn) Web 容器功能的服務(wù)器就是一個(gè) Web 服務(wù)器。比如 Tomcat,IIS,Jetty。

主流 Web 容器

包括 Tomcat,IIS,Jetty 。還有比較多使用 WebSphere,WebLogic 等等。

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

在 Web 服務(wù)器發(fā)展的同一個(gè)時(shí)期,應(yīng)用服務(wù)器已經(jīng)存在并發(fā)展很長(zhǎng)一段時(shí)間了。

一些公司為 Unix 開發(fā)了 Tuxedo(面向事務(wù)的中間件)、TopEnd、Encina 等產(chǎn)品,這些產(chǎn)品都是從類似 IMS 和 CICS 的主機(jī)應(yīng)用管理和監(jiān)控環(huán)境衍生而來(lái)的。

大部分的這些產(chǎn)品都指定了“封閉的”產(chǎn)品專用通信協(xié)議來(lái)互連胖客戶機(jī)(“fat” client)和服務(wù)器。

在 90 年代,這些傳統(tǒng)的應(yīng)用服務(wù)器產(chǎn)品開始嵌入 HTTP 通信功能,剛開始要利用網(wǎng)關(guān)來(lái)實(shí)現(xiàn)。不久后它們之間的界線開始變得模糊了。

同時(shí),Web 服務(wù)器越來(lái)越成熟,可以處理更高的負(fù)載、更多的并發(fā)和擁有更好的特性;應(yīng)用服務(wù)器開始添加越來(lái)越多的基于 HTTP 的通信功能。所有的這些導(dǎo)致了 Web 服務(wù)器與應(yīng)用服務(wù)器的界限變得更窄了。

目前,“應(yīng)用服務(wù)器”和“Web 服務(wù)器”之間的界限已經(jīng)變得模糊不清了。但是人們還把這兩個(gè)術(shù)語(yǔ)區(qū)分開來(lái),作為強(qiáng)調(diào)使用。

當(dāng)有人說(shuō)到“Web 服務(wù)器”時(shí),你通常要把它認(rèn)為是以 HTTP 為核心、Web UI 為向?qū)У膽?yīng)用。

當(dāng)有人說(shuō)到“應(yīng)用服務(wù)器”時(shí),你可能想到“高負(fù)載、企業(yè)級(jí)特性、事務(wù)和隊(duì)列、多通道通信(HTTP 和更多的協(xié)議)”。但現(xiàn)在提供這些需求的基本上都是同一個(gè)產(chǎn)品。

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

 

從上圖中可以看到 Web 應(yīng)用服務(wù)器包括了 Web 容器,同時(shí)內(nèi)置了支撐企業(yè)應(yīng)用的事務(wù),安全,集成,通信,高可用等等功能。

極大地減少了重復(fù)開發(fā)量,保障了業(yè)務(wù)系統(tǒng)快速開發(fā)和部署,而它本身也是一個(gè) Web 服務(wù)器。

Web 應(yīng)用服務(wù)器可以選擇使用大廠的 WebLogic 和 WebSphere 這種重量級(jí)產(chǎn)品外。

也可以使用類似與 Tomcat、Jetty 這樣的 Web Containner 再加上第三方的框架(Spring,Hibernate等)來(lái)構(gòu)建自己的 Application Server;.NET Core 平臺(tái)下可以選擇 IIS,Apache,Nginx 與 ASP.NET Core 構(gòu)建。

反向代理概念與基本原理

反向代理基本概念

反向代理是代理服務(wù)器的一種。它根據(jù)客戶端的請(qǐng)求,從后端的服務(wù)器(如Web 服務(wù)器)上獲取資源,然后再將這些資源返回給客戶端。

與前向代理不同,前向代理作為一個(gè)媒介將互聯(lián)網(wǎng)上獲取的資源返回給相關(guān)聯(lián)的客戶端,而反向代理是在服務(wù)器端(如 Web 服務(wù)器)作為代理使用,而不是客戶端。

客戶端通過(guò)前向代理可以訪問(wèn)很多不同的資源,反向代理是很多客戶端都通過(guò)它訪問(wèn)不同后端服務(wù)器上的資源,而不需要知道這些后端服務(wù)器的存在,以為所有資源都來(lái)自于這個(gè)反向代理服務(wù)器。

 

互聯(lián)網(wǎng)中的請(qǐng)求發(fā)送給反向代理,反向代理把請(qǐng)求轉(zhuǎn)發(fā)到內(nèi)網(wǎng)中的服務(wù)器。

反向代理的主要作用為:

  • 加密和SSL加速
  • 負(fù)載均衡
  • 緩存靜態(tài)內(nèi)容
  • 壓縮
  • 減速上傳
  • 安全防火墻
  • 外網(wǎng)發(fā)布
  • 突破互聯(lián)網(wǎng)封鎖
  • 解決跨域問(wèn)題

反向代理基本工作原理

一個(gè)反向代理服務(wù)器的構(gòu)成和處理過(guò)程如下圖:

 

左邊功能模塊對(duì)外網(wǎng)報(bào)文進(jìn)行處理,右邊灰色功能模塊針對(duì)內(nèi)網(wǎng)報(bào)文進(jìn)行處理。

TCP 監(jiān)聽(tīng)模塊

監(jiān)聽(tīng) TCP 請(qǐng)求,這里的請(qǐng)求是指報(bào)文內(nèi)容是某應(yīng)用層協(xié)議(比如 HTTP,F(xiàn)TP,Email 等應(yīng)用層協(xié)議)的請(qǐng)求。

至于這里是否會(huì)單獨(dú)產(chǎn)生一個(gè)線程來(lái)開始處理,這個(gè)由服務(wù)器自己決定,先入消息隊(duì)列然后異步處理,這樣能極大提高代理的吞吐量和穩(wěn)定性。

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

代理服務(wù)器根據(jù)一個(gè)表(存放外網(wǎng) URI 和內(nèi)網(wǎng)服務(wù)器的對(duì)應(yīng)關(guān)系,通常需人工進(jìn)行設(shè)置),如果匹配到則繼續(xù)處理,否則依據(jù)外網(wǎng)協(xié)議返回錯(cuò)誤信息,比如 HTTP 協(xié)議這返回 404。

應(yīng)用負(fù)載均衡策略

如果比較大型的互聯(lián)網(wǎng)應(yīng)用,為了整體系統(tǒng)穩(wěn)定性,解決單點(diǎn)問(wèn)題,需要根據(jù)自定義策略合理的轉(zhuǎn)發(fā)報(bào)文給被代理服務(wù)器。簡(jiǎn)單的策略是哈希分發(fā)或者隨機(jī)分發(fā),一般可以由用戶進(jìn)行配置和選擇。

預(yù)處理

這里依據(jù)協(xié)商好的外網(wǎng)應(yīng)用協(xié)議進(jìn)行解密,安全,會(huì)話,解壓等處理。

新生成網(wǎng)絡(luò)報(bào)文

這里依據(jù)協(xié)商好的內(nèi)網(wǎng)應(yīng)用協(xié)議生成網(wǎng)絡(luò)報(bào)文,這里可能會(huì)進(jìn)行加密,安全,會(huì)話,壓縮等處理。

轉(zhuǎn)發(fā)給被代理服務(wù)器

把新生成的網(wǎng)絡(luò)報(bào)文發(fā)送給內(nèi)網(wǎng)服務(wù)器(可能是否 Web 服務(wù)器,F(xiàn)TP 服務(wù)器,郵件服務(wù)器)。

接受網(wǎng)絡(luò)報(bào)文

接受內(nèi)網(wǎng)服務(wù)器反饋的網(wǎng)絡(luò)報(bào)文。

預(yù)處理

這里依據(jù)協(xié)商好的外網(wǎng)應(yīng)用協(xié)議進(jìn)行加密,安全,會(huì)話,壓縮等處理。

資源輸出模塊

這時(shí)生成滿足外網(wǎng)應(yīng)用協(xié)議要求的報(bào)文,并發(fā)送到外網(wǎng)連接的另一端(用戶代理)。

常用的反向代理服務(wù)器

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

總結(jié)

從概念上講:

  • Web 服務(wù)器是提供 WWW 服務(wù)的程序。
  • Web 容器是提供給開發(fā)者的框架。
  • Web 應(yīng)用程序服務(wù)器內(nèi)容豐富得多,既可由各廠商通常遵循一定的工業(yè)標(biāo)準(zhǔn)并自定義擴(kuò)展功能而成,也可以利用開源組件輕量級(jí)拼裝打造。
  • 反向代理服務(wù)器在企業(yè)級(jí)應(yīng)用中表現(xiàn)突出,具有解決集中式安全,負(fù)載均衡等等優(yōu)點(diǎn)。

如今這四個(gè)概念的邊界越來(lái)模糊,看看這個(gè)表就知道了

 

關(guān)于 Kerstrel 是否是 Web 容器,有兩種觀點(diǎn):

  • 由于 Kerstrel 不提供編寫應(yīng)用的框架,所以它不是容器;ASP.NET Core 才是容器,因?yàn)樗峁┝碎_發(fā)應(yīng)用的框架并提供 Web 應(yīng)用(MVC,Web API)運(yùn)行環(huán)境。
  • Kerstrel 提供了運(yùn)行環(huán)境。

非常歡迎大家提出自己的有力觀點(diǎn),幫助我們清晰化這個(gè) ASP.NET Core 容器概念。

參考資料:

  • https://en.wikipedia.org/wiki/Web_server
  • http://www.cnblogs.com/vipyoumay/p/5853694.html
  • https://zh.wikipedia.org/wiki/%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86

 

 

責(zé)任編輯:武曉燕 來(lái)源: 博客園
相關(guān)推薦

2019-04-24 15:13:16

Web服務(wù)器應(yīng)用服務(wù)器Web容器

2017-09-20 10:22:15

Web服務(wù)器容器

2017-11-10 08:58:49

Web服務(wù)器應(yīng)用程序

2009-02-28 14:23:02

2010-03-30 18:26:07

Nginx Web服務(wù)

2011-08-31 16:37:51

Nginx

2009-01-16 14:37:57

TomcatWeb服務(wù)器應(yīng)用服務(wù)器

2011-07-26 16:43:59

iPhone Web 服務(wù)器

2017-10-17 09:15:06

Web服務(wù)器區(qū)別

2010-12-28 15:39:38

2010-05-13 18:32:52

2019-02-26 16:20:52

FTP服務(wù)器

2018-12-07 08:38:49

代理服務(wù)器Web服務(wù)器通信

2018-08-07 08:54:18

2018-08-23 09:16:22

2012-02-23 10:02:08

Web服務(wù)器應(yīng)用服務(wù)器

2018-02-05 10:36:01

APP服務(wù)器WEB

2012-04-02 14:25:12

squid緩存

2009-01-10 19:32:36

2012-09-19 09:47:58

PHPWeb服務(wù)器
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)