Web服务器、应用服务器、Web容器、反向代理服务器的区别

我们知道,不同肤色的人外貌差别很大,而双胞胎的辨识很难。有意思的是Web服务器/Web容器/Web应用程序服务器/反向代理有点像四胞胎,在网络上经常一起出现。本文将带读者对这四个相似概念如何区分。

1.1. Web服务器概念与基本原理1.1.1. Web服务器的历史

1989年,互联网之父Berners-Lee向其雇主CERN提出了一个新项目,目的是通过使用超文本系统来缓解科学家之间的信息交流。该项目导致Berners-Lee在1990年编写了两个方案:

一个名为WorldWideWeb的浏览器。

世界上第一个网络服务器,后来被称为CERN httpd,它运行在NeXTSTEP上。在1991年至1994年期间,用于通过万维网冲浪和交换数据的早期技术的简单性和有效性有助于将其移植到许多不同的操作系统,并将其用于科学组织和大学,然后传播到行业。

Web服务器、应用服务器、Web容器、反向代理服务器的区别

1994年,Berners-Lee决定组建万维网联盟(W3C),通过标准化过程来管理涉及的许多技术(HTTP,HTML等)的进一步发展。

就是这台服务器:

Web服务器、应用服务器、Web容器、反向代理服务器的区别

Web服务器的主要功能是存储,处理和传递网页给客户。客户端和服务器之间的通信使用超文本传输协议(HTTP)进行。交付的页面最常见的是HTML文档,除了文本内容之外,还可能包含图像,样式表和脚本。

一个用户代理,通常是web浏览器或web爬虫,通过发起一个HTTP请求以获取服务器资源,服务器根据请求返回该资源或由于某种原因响应错误消息。该资源通常是服务器辅助存储上的真实文件,但这不一定是这种情况,取决于Web服务器的实现方式。

Web服务器的实现方式

虽然主要功能是提供内容,但HTTP的完整实现还包括从客户端接收内容的方式。此功能用于提交Web表单,包括上传文件。许多通用Web服务器还支持使用Active Server Pages(ASP),PHP或其他脚本语言的服务器端脚本。这意味着Web服务器的行为可以在单独的文件中脚本化,而实际的服务器软件保持不变。通常,此函数用于动态生成HTML文档(“即时”),而不是返回静态文档。前者主要用于从数据库检索或修改信息。后者通常快得多,并且更容易被缓存,但不能提供动态内容。

Web服务器不仅用于为万维网服务。它们也可以被嵌入到诸如打印机,路由器,网络摄像机等设备中,并且仅服务于本地网络。然后,web服务器可以用作用于监视或管理所讨论的设备的系统的一部分。这通常意味着客户端计算机上不需要安装其他软件,因为只需要一个网络浏览器(现在大多数操作系统都包含在内)。

1.1.2. Web服务器工作原理

HTTP协议基于TCP协议上,是一个应用层协议,用于用户代理和Web服务器进行通信。Web服务器通常采用一问一答的方式进行工作:

1、在用户代理上用户发起资源请求,请求内容包括但不限于:指定资源的唯一标识IRI,指明动作类型(GET/POST/DELETE/PUT...)

2、用户代理解析用户输入IRI并从中获取目标域名,交由DNS服务器解析。如果IRI中指定某IP地址,这无需这步。

3、如果与服务器的会话还没建立,此时先建立TCP连接,并完成HTTP协商(确定双方均可接受的处理方式,包括协议版本,是否加密,内容格式等等)。

4、用户代理把请求内容封装成HTTP数据包向服务器发送。

5、服务器接收到资源请求并以之前协商好的方式解包并处理。

6、服务器请求的资源封装成HTTP数据包并返回给用户代理。

接下来重点说说服务器端的工作原理

服务器端的工作原理

TCP监听模块

服务器监听某个端口(一般默认是8080端口,用户可以设置其他端口),以建立和用户代理之间的连接。一旦建立连接,用户代理的后续HTTP请求将不用再进入监听模块。

预处理

此处主要做三件事:1. 从TCP报文中获取HTTP请求报文。 2. 根据和用户代理的协商进行解密,解压,安全处理等等。3. 根据服务器自身的配置进行安全处理,建立会话状态等等。

UR路由

解析URL字符串和动作以确定用户代理请求的资源,根据匹配规则(通常根据正则表达式+后缀)路由到静态资源处理模块或动态资源处理模块。

静态资源处理模块

负责找到静态资源,比如HTML/Java/CSS文件/图片/图像,确定内容是字符流或者字节流,并确定对应MIME,比如HTML生成MIME为text/html的字符流,mpeg视频文件生成MIME为video/mpeg的字节流。

动态资源处理模块

运行业务逻辑处理,动态决定返回的资源内容和类型,内容和类型的处理原则同上。

后处理

根据和用户协商的协议进行加密,压缩,安全处理等等。

资源输出模块

把处理好的内容和类型封装成HTTP报文,往TCP连接另一头的用户代理发送TCP报文(内容是HTTP报文)。

主流Web服务器

包括Apache、IIS 、Nginx,还有比较多使用Tomcat,Jetty,WebSphere,WebLogic,Kerstrel等等。

1.2. Web应用程序容器概念与基本原理

1.2.1. Web应用程序容器的由来

Web服务器的出现的标志着WWW时代的带来,世界变得更加平面化。当初尝到甜头的开创者们开始不满足与在互联网上获取静态资源,于是出现了CGI脚本来动态获取资源。再后来网络发展方向也是朝着增强Web服务器动态获取资源的能力前进。

以下是代表性的动态技术:技术名词特点 CGI(Common Gateway Interface,公用网关接口)以独立进程运行,可以用多种语言开发,比如C,C++,VB,Perl,灵活但效率低,维护复杂 PHP服务器端嵌入HTML脚本,开源,功能强大,扩展性较差 JSP服务器端嵌入HTML脚本,跨平台,部署前需编译,主要缺点是编写JSP比较复杂,需熟悉JAVA及相关技术 ASP服务器端嵌入HTML脚本,开发简单,功能强大,只能在windows下运行 。

随后Web服务器朝着企业级应用方向发展,快速的业务变化,迫使Web开发人员面对新的挑战:如何快速写出鲁棒,可靠,符合业务需求的程序并顺利部署?解决这个挑战的一个有效的办法是,创造一个Web程序开发框架(含运行环境,比如解释执行JSP,Web API),这个框架解决鲁棒性,可靠性问题,提供快速开发接口。换言之,开发人员只需要专注于实现业务本身,如有更高的需求还可以对框架进行定制和扩展。这个框架的另外一个名字是Web应用程序容器。

1.2.2. Web应用程序容器的基本工作原理

一般情况下Web应用程序容器是以下构成体系:

Web应用程序容器构成体系

注:浅蓝色的模块是实现业务程序的主要使用模块。

相对于Web服务器,该容器新增或强化了以下模块:

分配线程池资源

容器为每个请求分配一个线程进行处理,通常采取线程池的方式高效理由CPU算资源。

封装Request上下文

一个请求对应一个Re



专题活动:

天下数据15年专注海外美国服务器|香港服务器|云主机|虚拟主机租用托管以及服务器解决方案-做天下最好的IDC服务商

关于天下数据 联系我们 诚聘英才 付款方式 帮助中心 网站备案 解决方案 域名注册 网站地图

《中华人民共和国增值电信业务经营许可证》 ISP证:粤ICP备07026347号-6

朗信天下发展有限公司(控股)深圳市朗玥科技有限公司(运营)联合版权

7×24小时服务热线:4006388808 7×24小时售后支持:0755-83460017

7×24小时销售热线:4006388808              香港服务电话:+852 67031102

深圳总部:中国.深圳市福田区车公庙苍松大厦北座13层 香港总部:香港上環蘇杭街49-51號建安商業大廈7樓