我们知道,不同唇色的人外表差异很大,很难识别双胞胎。 有趣的是,Web服务器/Web容器/Web应用服务器/反向代理有点像四对双胞胎,它们经常一起出现在互联网上。 本文将向读者展示如何区分这四个相似的概念。
1.1. Web服务器概念及基本原理
1.1.1. Web 服务器的历史
1989年,互联网之父伯纳斯·李向他的雇主欧洲核子研究组织(CERN)提出了一个新项目,旨在通过使用超文本系统简化科学家之间的信息交换。 该项目导致 Berners-Lee 在 1990 年编制了两项提案:
1994 年,Berners-Lee 决定成立万维网联盟 (W3C),通过标准化流程来管理所涉及的许多技术(HTTP、HTML 等)的进一步发展。
这是服务器:
Web服务器的主要功能是存储、处理并向客户端传送网页。 客户端和服务器之间的通信是使用超文本传输协议(HTTP)完成的。 交付的页面通常是 HTML 文档,除了文本内容之外,还可能包含图像、样式表和脚本。
用户代理(通常是网络浏览器或网络爬虫)发起HTTP请求以获取服务器资源,服务器根据请求返回资源或由于某种激励而响应错误消息。 该资源通常是服务器辅助存储上的实际文件,但情况不一定如此,具体取决于 Web 服务器的实现。
其实主要功能是提供内容,但是HTTP的完整实现还包括从客户端接收内容的形式。 该功能用于提交Web表单,包括上传文件。 许多通用 Web 服务器还支持使用 ActiveServerPages (ASP)、PHP 或其他脚本语言的服务器端脚本。 这意味着 Web 服务器的行为可以在单独的文件中编写脚本,而实际的服务器软件保持不变。 一般来说,此函数用于动态(“即时”)生成 HTML 文档,而不是返回静态文档。 后者主要用于从数据库中检索或更改信息。 前者通常更快且更容易缓存,但无法提供动态内容。
Web 服务器除了为万维网提供服务外还被使用。 它们还可以嵌入复印机、路由器、网络摄像头等设备中,并且仅服务于本地网络。 然后,网络服务器可以用作监控或管理相关设备的系统的一部分。 这通常意味着客户端计算机上不需要安装任何其他软件,因为所需的只是一个网络浏览器(当今大多数操作系统都包含)。
1.1.2. Web服务器工作原理
HTTP契约基于TCP契约,是用户代理和Web服务器之间通信的应用层契约。 Web 服务器通常以一问一答的形式工作:
用户向用户代理发起资源请求,请求内容包括但不限于:指定资源唯一标记的URI、指定的动作类型(GET/POST/DELETE/PUT...)
用户代理解析用户输入的URI并从中获取目标域名,然后由DNS服务器解析。 如果URI手动指定IP地址,则不需要此步骤。
如果与服务器的会话尚未完成,则首先建立TCP连接并完成HTTP协商(确定双方都能接受的处理方式,包括合约版本、是否加密、内容格式等)。
用户代理将请求的内容封装成HTTP数据包并发送给服务器。
服务器收到资源请求后,按照之前协商好的方法进行解包处理。
服务器请求的资源被封装成HTTP数据包返回给用户代理。
拿出来重点看一下服务器端的工作原理
主流网络服务器
包括Apache、IIS、Nginx,市场份额如下
使用较多的有Tomcat、Jetty、WebSphere、WebLogic、Kerstrel等。
1.2. Web应用容器概念和基本原理
1.2.1. Web应用容器的由来
Web服务器的出现标志着WWW时代的到来,世界变得越来越平坦。 尝到甜头的先行者开始不满足于在互联网上获取静态资源,于是出现了动态获取资源的CGI脚本。 后来互联网的发展方向也朝着提高Web服务器动态获取资源的能力发展。 以下是具有代表性的动态技术:
技术名词 特征
CGI(CommonGatewayInterface,公共网段套接字)
作为独立进程运行,可以用C、C++、VB、Perl等多种语言开发php反向代理,灵活但效率低下,维护复杂
PHP
服务器端嵌入HTML脚本,开源,功能强大,扩展性差
联合应用程序
服务器端嵌入HTML脚本,跨平台,部署前需要编译。 主要缺点是编译JSP比较复杂,需要熟悉JAVA及相关技术
ASP
服务器端嵌入HTML脚本,开发简单,功能强大,只能在windows下运行
此后,Web服务器向企业级应用发展,快速的业务变化促使Web开发人员面临新的挑战:如何快速勾画出健壮、可靠、满足业务需求的程序并顺利部署? 解决这一挑战的有效途径是创建一个Web程序开发框架(包括解释和执行JSP、WebAPI等运行环境),解决健壮性和可靠性问题,并提供快速开发套接字。 也就是说,开发者只需要专注于业务本身的实现,如果有更高的需求,可以对框架进行定制和扩展。 该框架的另一个名称是 Web 应用程序容器。
1.2.2. Web应用容器的基本工作原理
通常,Web应用容器是以下组成系统:
注:浅黄色模块是用于实现业务程序的主要模块。
与Web服务器相比,容器增加或增强了以下模块:
容器为每个请求分配一个线程来处理,一般采用线程池的形式来高效分配CPU计算资源。
一个请求对应一个Request上下文,主要封装了用户请求的主要组成部分:URL、HTTP请求头以及根据请求头创建的Session、Cookie等对象,方便编程。
一个请求对应一个响应上下文,主要用于向用户代理返回资源。 输出流可以被写入、或重定向、或返回错误代码等。
在容器中,开发者可以设置不同的路由匹配规则,比如允许.HTM返回.HTML,或者自定义.xyz返回.HTML资源。 更灵活的配置请参考JAVAMVC或ASP.NETMVC的配置方案。
一般来说,这里的特定容器和开发语言都有自己高效的开发模型,比如JAVA的Servlet、ASP.NET的WebForm、MVC等。
这里,刚才的线程资源就会被回收。 对于线程的复用,除非服务器空闲,否则线程通常会被返回到线程池中。
可见Web容器本身就具有作为Web服务器的功能。 事实上,一般实现Web容器功能的服务器就是Web服务器。 例如,Tomcat、IIS、Jetty。
主流Web容器
包括Tomcat、IIS、Jetty。
使用较多的是WebSphere、WebLogic等。
1.3. Web应用服务器概念和基本原理
在Web服务器发展的同一时期,应用服务器已经存在并发展了很长一段时间。 一些公司针对Unix开发了Tuxedo(面向事务的中间件)、TopEnd、Encina等产品,这些产品都源自IMS、CICS等大型机应用管理和监控环境。 这些产品中的大多数都指定“封闭的”特定于产品的通信契约来互连胖客户端(“胖”客户端)和服务器。 20世纪90年代,这种传统的应用服务器产品开始嵌入HTTP通信功能,最初是借助网段来实现的。 不久之后,他们之间的界限开始变得模糊。
与此同时,Web服务器也越来越成熟,能够处理更高的负载,更多的并发,并且拥有更好的功能; 应用服务器开始添加越来越多的基于HTTP的通信功能。 所有这些都导致 Web 服务器和应用程序服务器之间的界限显得更加狭窄。
如今,“应用程序服务器”和“Web 服务器”之间的界限早已变得模糊。 人们也区分这两个术语并将其用作指针。
当有人说“Web服务器”时,你通常会认为它是一个以HTTP为核心、以WebUI为导向的应用程序。 当有人说“应用程序服务器”时,您可能会想到“高负载、企业功能、事务和队列、多通道通信(HTTP 和更多合约)”。 但今天,它基本上是满足这种需求的相同产品。
右图描述了典型 Web 应用服务器的配置:
从上图我们可以看到,Web应用服务器包含了Web容器,同时对外支持业务应用、安全、集成、通信、高可用等功能,大大减少了重复开发和开发的量。确保业务体系。 快速开发和部署,同时它本身也是一个Web服务器。 Web应用服务器可以选择使用各大厂商的WebLogic、WebSphere等重量级产品php反向代理,也可以使用Tomcat、jetty等Web容器加上第三方框架(spring、hibernate等)构建自己的ApplicationServer;.NETCore平台下,您可以选择IIS、Apache、Nginx和ASP.NETCore来构建。
1.4. 反向代理概念及基本原理
1.4.1. 反向代理的基本概念
反向代理是代理服务器的一种。 根据客户端的请求,从前端服务器(如Web服务器)获取资源,然后将这些资源返回给客户端。 与正向代理不同的是,正向代理作为媒介将互联网上获取的资源返回给关联的客户端,而反向代理则作为服务器端(如Web服务器)的代理,而不是客户端边。 客户端通过正向代理可以访问很多不同的资源,而反向代理是指很多客户端通过它访问不同前端服务器上的资源,而不知道这样一个前端服务器的存在,并认为所有资源都来自于这个反向代理服务器。
互联网中的请求被发送到反向代理,反向代理将请求转发到外网的服务器。
反向代理的主要功能有:
1.4.2. 反向代理的基本工作原理
反向代理服务器的组成和处理过程如右图所示:
一侧浅蓝色功能模块处理外部网络数据包,左侧蓝色功能模块处理外部网络数据包
常用的反向代理服务器
它们的名字您一定记得:Ngnix,IIS,Apache。
1.5. 概括
从概念上讲:Web服务器是提供WWW服务的程序; Web容器是提供给开发者的一个框架; Web应用服务器的内容更加丰富,各个厂家一般都可以遵循一定的行业标准,定制扩展功能。 ,也可以借助开源组件进行组装和构建; 反向代理服务器在企业级应用中表现突出,具有解决集中式安全、负载均衡等优点。 现在这四个概念之间的界限越来越模糊,看看这张表:
软件术语是否是 Web 服务器 Web 容器是 Web 应用程序服务器是反向代理
信息系统
是的
是的
是的
nginx
是的
是的
阿帕奇
是的
是的
雄猫
是的
是的
码头
是的
是的
WebSphere
是的
是的
是的
网络逻辑
是的
是的
是的
克斯特雷尔
是的
是的?