应用程序服务器和Web服务器有什么区别?

应用程序服务器和Web服务器有什么区别?

大多数情况下,这些术语Web服务器和应用程序服务器可以互换使用。

以下是Web Server和Application Server的一些主要差异:

  • Web服务器旨在为HTTP内容提供服务。 App Server也可以提供HTTP内容,但不仅限于HTTP。 它可以提供其他协议支持,如RMI / RPC
  • 尽pipe大多数Web服务器都有插件来支持脚本语言,比如Perl,PHP,ASP,JSP等,这些服务器可以通过这些脚本生成dynamic的HTTP内容,但Web服务器主要是为静态内容提供服务的。
  • 大多数应用程序服务器都将Web Server作为其中的一部分,这意味着App Server可以执行任何Web Server的function。 此外,App Server还具有支持应用程序级别服务的组件和function,如连接池,对象池,事务支持,消息服务等。
  • 由于Web服务器非常适合用于dynamic内容的静态内容和应用程序服务器,因此大多数生产环境都将Web服务器用作应用程序服务器的反向代理。 这意味着,在服务页面请求时,静态内容(如图像/静态HTML)由解释请求的Web服务器提供。 使用某种过滤技术(主要是请求资源的扩展),Web服务器识别dynamic内容请求并将其透明地转发给应用服务器

这种configuration的示例是Apache Tomcat HTTP Server和Oracle(以前称为BEA)WebLogic Server。 Apache Tomcat HTTP Server是Web Server,Oracle WebLogic是Application Server。

在某些情况下,这些服务器是紧密集成的,如IIS和.NET Runtime。 IIS是Web服务器。 当配备.NET运行时环境时,IIS能够提供应用程序服务。

两个术语都是非常通用的,一个包含另一个,反之亦然。

  • Web服务器 :使用http协议向Web提供内容。

  • 应用程序服务器 :主机和公开业务逻辑和进程。

我认为重点是Web服务器通过http协议公开所有的东西,而应用服务器不限于此。

也就是说,在许多情况下,您会发现Web服务器正在用于创build应用程序服务器的前端,也就是说,它公开了一组允许用户与发现的业务规则进行交互的网页应用服务器。

这是一个详细的答案与一些情况,以清楚地了解差异,相似性,以及如何结合起来和所有

应用程序服务器是一个有时与Web服务器混合的术语。 当一个Web服务器主要处理HTTP协议时 ,应用服务器处理几种不同的协议,包括但不限于HTTP

Web服务器的主要工作是显示站点内容 ,应用服务器负责逻辑 ,用户与显示内容之间的交互。 应用程序服务器与Web服务器一起工作 ,其中一个显示,另一个交互。

在服务器和客户端之间来回传递的信息不限于简单的显示标记,而是两者之间的交互。

在大多数情况下,服务器通过组件API (例如J2EE (Java 2平台)EJB (企业JavaBean)和其他不同的应用程序软件模型创build交互

在这里输入图像描述

一个例子:

理解应用程序服务器与Web服务器一起工作的场景与没有应用程序服务器的场景之间的区别的最好方法是通过在线商店。

情况1:没有应用程序服务器的Web服务器

你有一个网上商店,只有一个networking服务器,没有应用程序服务器。 该网站将提供一个显示,您可以从中select一个产品。 提交查询时,网站执行查找并将HTML结果返回给客户端。 Web服务器将您的查询直接发送到数据库服务器(耐心等待,我将在下一个块中解释这个问题)并等待响应。 Web服务器一旦收到,就会将响应制定成HTML文件,并将其发送到您的Web浏览器。 每次运行查询时,都会在服务器和数据库服务器之间来回通信。

场景2:带有应用程序服务器的Web服务器

如果您要运行的查询已经完成,并且此后没有数据更改,则服务器将生成结果,而不必将请求发送到数据库服务器。 这允许实时查询第二个客户端可以访问相同的信息,并接收实时,可靠的信息,而无需发送另一个重复的查询到数据库服务器。 服务器基本上充当数据库服务器和Web服务器之间的中介。 这允许在第一种情况下拉取的信息是可重用的,因为这些信息被embedded到特定的“定制的”HTML页面中,这不是一个可重用的过程。 第二个客户端将不得不再次请求信息并接收另一个HTMLembedded式页面,其中包含所请求的信息 – 效率极低。 更不用说这种types的服务器是非常灵活的,因为它能够pipe理自己的资源,包括安全性,事务处理,消息传递和资源池。

为了支持如此复杂的任务,该服务器必须具有内置的冗余,强大的处理能力和大量的RAM以实时处理所有的数据。

希望这可以帮助。

正如Rutesh和jmservera所指出的,这个区别是模糊的。 从历史上看,它们是不同的,但是到了90年代,这两个以前不同的类别混合在一起并且有效地合并。 在这一点上可能是最好的想象,“应用服务器”产品类别是“networking服务器”类别的严格超集。

一些历史。 在Mosaic浏览器和超链接内容的早期,有人开发了这种称为“Web服务器”的服务,通过HTTP为网页内容和图像提供服务。 大部分内容是静态的,而HTTP 1.0协议只是一种发送文件的方式。 很快,“networking服务器”类别逐渐演变为包含CGIfunction – 有效地启动每个networking请求的stream程以生成dynamic内容。 HTTP也已经成熟,产品变得更加复杂,具有caching,安全性和pipe理function。 随着技术的成熟,我们得到了Kiva和NetDynamics公司特有的基于Java的服务器端技术,最终所有这些技术都合并到了JSP中。 微软在1996年将ASP添加到了Windows NT 4.0中。 静态Web服务器已经学到了一些新的技巧,所以它是一个有效的“应用程序服务器”在很多情况下。

在并行类中,应用程序服务器已经发展并存在了很长一段时间。 公司为Unix提供了像Tuxedo,TopEnd,Encina这样的产品,这些产品是从大型机应用程序pipe理和监控环境(如IMS和CICS)中派生出来的。 微软的产品是Microsoft Transaction Server(MTS),后来演变成COM +。 这些产品中的大多数指定了“封闭的”特定于产品的通信协议,以将“胖”客户端连接到服务器。 (对于Encina,通信协议是DCE RPC; MTS是DCOM等)。1995/96,这些传统的应用服务器产品开始通过网关开始embedded基本的HTTP通信function。 线条开始模糊。

Web服务器在处理更高的负载,更多的并发性和更好的function方面越来越成熟。 应用程序服务器提供了越来越多的基于HTTP的通信function。

在这一点上,“应用程序服务器”和“networking服务器”之间的界限是模糊的。 但是人们仍然不同地使用这些术语作为重点。 当有人说“networking服务器”时,你经常会想到以HTTP为中心,Web UI,面向应用程序。 当有人说“应用程序服务器”时,您可能会认为“负载较重,企业function,交易和排队,多渠道通信(HTTP +)”,但通常同样的产品可以满足两套工作负载要求。

  • WebSphere,IBM的“应用程序服务器”拥有自己的捆绑Web服务器。
  • 另一个传统的应用服务器WebLogic也是如此。
  • Windows是Microsoft的App Server(除了它的文件和打印服务器,媒体服务器等之外),它捆绑了IIS。

正如前面所说,Web服务器处理HTTP请求,而应用程序服务器处理分布式组件的请求。 因此,理解差异的最简单方法就是比较两种产品在编程环境方面的差异。

Web服务器 – >编程环境

IIS:ASP(.NET)

Tomcat:Servlet

docker:Servlet

Apache:Php,CGI

应用程序服务器 – >编程环境

MTS:COM +

WAS:EJB

JBoss:EJB

WebLogic应用程序服务器:EJB

关键区别在于应用程序服务器支持一些分布式组件技术,提供远程调用和分布式事务的function,如Java世界中的EJB或Microsoft平台上的COM + 。 Http服务器通常支持一些更简单的编程环境,通常是脚本编写,比如基于Microsoft或Servlet的ASP(.NET),包括JSP和许多其他的Java或PHP和CGI。

其他function,如负载平衡,集群,会话故障切换,连接池等曾经处于应用服务器领域的function,也可以直接或通过某些第三方产品在Web服务器上使用。

最后,值得注意的是,这个图片被像Spring Framework这样的“轻量级容器”进一步扭曲了,这往往以更简单的方式补充了应用服务器的用途,而没有应用服务器基础设施。 而且由于应用程序中的分布方面正在从分布式组件转向服务范型和SOA架构,传统应用程序服务器的空间越来越less。

networking服务器

运行python -m 'SimpleHTTPServer'并转到http:// localhost:8080 。 你看到的是一个Web服务器在运作。 服务器仅通过存储在计算机上的HTTP来提供文件。 关键是,所有这些都是在HTTP协议之上完成的。 例如,也有FTP服务器,它们完成相同的事情(服务存储的文件),但在不同的协议之上。

应用服务器

假设我们有一个像下面这样的小应用程序(来自Flask的片段)。

 @app.route('/') def homepage(): return '<html>My homepage</html>' @app.route('/about') def about(): return '<html>My name is John</html>' 

小示例程序将URL /functionhomepage()/about映射到about()的function。

为了运行这个代码,我们需要一个应用服务器 – 一个程序或模块,可以监听来自客户端的请求并使用我们的代码,dynamic地返回一些东西。 在这个例子中,我们只返回一些非常糟糕的HTML。

所有其他人谈论什么是业务逻辑? 那么,由于URL映射到我们的代码库中的某个地方,我们假设地显示了一些有关我们的程序如何工作的逻辑。


重述

Web服务器 – 提供存储在某个地方的文件(通常是.css,.html,.js)。 常见的Web服务器有Apache,Nginx甚至Python的SimpleHTTPServer。

应用程序服务器 – 提供即时生成的文件。 基本上,大多数Web服务器都有某种插件,甚至有内置的function。 还有像Gunicorn(Python),Unicorn(Ruby),uWSGI(Python)等严格的应用程序服务器。

请注意,您可以使用应用程序服务器的代码实际构buildWeb服务器。 在某些情况下,您可能不希望在您的计算机上运行大量不同的服务器,这在某些情况下会完成。

Web服务器专门处理HTTP / HTTPS请求。 它使用HTTP / HTTPS协议向Web提供内容。

应用程序服务器通过任意数量的协议向应用程序提供业务逻辑,可能包括HTTP。 应用程序可以像调用对象的方法一样使用这个逻辑。 在大多数情况下,服务器通过组件API(如Java EE(Java平台,企业版)应用程序服务器上的EJB(Enterprise JavaBean)组件模型)公开此业务逻辑。 重点是Web服务器通过http协议公开一切,而应用服务器不限于此。 因此,应用程序服务器比Web服务器提供更多的服务,通常包括:

  • (专有或非专有)API
  • 负载平衡,故障转移…
  • 对象生命周期pipe理
  • 国家pipe理(会议)
  • 资源pipe理(例如连接池到数据库)

大多数应用程序服务器都将Web Server作为其中的一部分,这意味着App Server可以执行任何Web Server的function。 此外,App Server还具有支持应用程序级别服务的组件和function,如连接池,对象池,事务支持,消息服务等。

应用服务器可以(但不总是)在Web服务器上运行以执行程序逻辑,其结果可以由Web服务器传送。 这是一个Web服务器/应用程序服务器场景的例子。 Internet信息服务器/ SharePoint服务器关系是微软世界的一个很好的例子。 IIS是一个Web服务器; SharePoint是一个应用程序服务器。 SharePoint位于IIS的“顶部”,执行特定的逻辑,并通过IIS提供结果。 在Java世界中,例如,Apache和Tomcat也有类似的情况。

由于Web服务器非常适合用于dynamic内容的静态内容和应用程序服务器,因此大多数生产环境都将Web服务器用作应用程序服务器的反向代理。 这意味着在服务页面请求的时候,静态内容如图片/静态html由解释请求的web服务器提供服务。 使用某种过滤技术(主要是请求资源的扩展),Web服务器识别dynamic内容请求并将其透明地转发给应用服务器。

这种configuration的例子是Apache HTTP Server和BEA WebLogic Server。 Apache HTTP Server是Web Server,BEA WebLogic是Application Server。 在某些情况下,服务器是紧密集成的,如IIS和.NET运行时。 IIS是Web服务器。 当配备.NET运行时环境时,IIS能够提供应用程序服务


 Web Server Programming Environment Apache PHP, CGI IIS (Internet Information Server) ASP (.NET) Tomcat Servlet Jetty Servlet Application Server Programming Environment WAS (IBM's WebSphere Application Server) EJB WebLogic Application Server (Oracle's) EJB JBoss AS EJB MTS COM+ 

简而言之, Web服务器是通过http向用户提供网页的服务器。 应用程序服务器是承载系统业务逻辑的服务器。 它经常承载长时间运行/批处理stream程和/或不适合人类使用的互操作服务(REST / JSON服务,SOAP,RPC等)。

Web服务器运行HTTP协议来提供网页。 应用服务器可以(但不总是)在Web服务器上运行以执行程序逻辑,其结果可以由Web服务器传送。 这是一个Web服务器/应用程序服务器场景的例子。

Internet信息服务器/ SharePoint服务器关系是微软世界的一个很好的例子。 IIS是一个Web服务器; SharePoint是一个应用程序服务器。 SharePoint位于IIS的“顶部”,执行特定的逻辑,并通过IIS提供结果。

在Java世界中,例如,Apache和Tomcat也有类似的情况。

通常devise和部署应用程序服务器以促进更长时间运行的进程,这些进程也将更耗费资源。

通常,Web服务器用于不是资源密集型的短突发。 这主要是为了便于提供基于networking的stream量。

这两者之间的边界越来越薄。

应用程序服务器将业务逻辑公开给客户端。 因此,它的应用程序服务器包含一组方法(不一定是,甚至可以是允许许多人运行软件的联网计算机)来执行业务逻辑。 所以它只会输出所需的结果,而不是HTML内容。 (类似于方法调用)。 所以它不是基于HTTP的。

但是,Web服务器将HTML内容传递给Web浏览器(严格基于HTTP)。 Web服务器只能处理静态Web资源,而服务器端脚本的出现也帮助Web服务器处理dynamic内容。 Web服务器接受请求并将其引导至脚本(PHP,JSP,CGI脚本等)以创build要发送给客户端的HTML内容。 然后Web服务器知道如何将它们发送回客户端。 因为这是一个Web服务器真正知道的。

话虽如此,如今开发者一起使用这两者。 在Web服务器接受请求并调用脚本来创buildHTML的情况下,BUT脚本将再次调用应用服务器LOGIC(例如,检索交易详情)来填充HTML内容。

所以在这种情况下,两台服务器都被有效地使用了

因此,我们可以相当安全地说,在当今大多数情况下,Web服务器被用作应用程序服务器的一个子集。 但是戏剧性却不是这样。

我已经阅读了许多关于这个话题的文章,并且发现这篇文章相当方便。

在Java方面,还有一个: Web容器 (或者更严格地说,是servlet容器)。 就是说,在Web服务器和应用程序服务器之间。 Java容器是Java应用服务器,基本上实现Java EE的JSP / Servlet部分,缺lessJava EE的几个核心部分,比如EJB支持。 Apache Tomcat就是一个例子。

一方面,networking服务器通过HTTP协议提供网页内容(HTML和静态内容)。 另一方面,应用程序服务器是一个容器,您可以通过各种协议(包括n层体系结构中的HTTP)来构build业务逻辑和stream程,并将其展示给客户端应用程序。

因此,应用程序服务器比Web服务器提供更多的服务,通常包括:

  • (专有或非专有)API
  • 对象生命周期pipe理,
  • 国家pipe理(会议),
  • 资源pipe理(例如连接池到数据库),
  • 负载平衡,故障转移…

AFAIK, ATG Dynamo是90年代后期第一个应用服务器之一(根据上面的定义)。 在2000年初,它是一些专有应用服务器如ColdFusion (CFML AS), BroadVision (服务器端JavaScript AS)等的统治,但在Java应用服务器时代还没有真正存在。

应用程序服务器是一台机器(实际上运行在某台机器上的可执行进程),它可以监听(在任何通道上,使用任何协议),为来自客户端的请求提供任何服务,然后根据这些请求做一些事情。 (可能会或可能不会涉及到客户)

Web服务器正在一台机器上运行,该机器使用“internet”协议(http,https,ftp等)之一专门在TCP / IP通道上“侦听”,并根据这些传入的请求执行任何操作。一般来说,(根据原始定义),它获取/生成并返回一个HTML网页到客户端,或者从服务器上的静态html文件中获取,或者根据传入客户端请求中的参数dynamic构build。

Web服务器处理HTTP请求的最大区别是,应用程序服务器将在任意数量的协议上执行业务逻辑。

不一定有明确的分界线。 现在,许多程序结合了服务http请求(web服务器)和处理业务逻辑(app服务器)

Web服务器既可以是计算机程序,也可以是运行程序的计算机,它负责接受来自客户端的HTTP请求,并将HTTP响应与可选的数据内容(通常是诸如HTML文档和其上的链接对象之类的网页)一起回送。

应用程序服务器是将各种应用程序传递到另一个设备的软件引擎。 这是在办公室或大学networking中find的一种计算机,它允许networking中的每个人从同一台计算机上运行软件。

以上所有内容都是过于复杂的事情,非常简单。 一个应用程序服务器包含一个Web服务器,一个应用程序服务器只比标准Web服务器多一个附加/扩展。 以TomEE为例:

 CDI - Apache OpenWebBeans EJB - Apache OpenEJB JPA - Apache OpenJPA JSF - Apache MyFaces JSP - Apache Tomcat JSTL - Apache Tomcat JTA - Apache Geronimo Transaction Servlet - Apache Tomcat Javamail - Apache Geronimo JavaMail Bean Validation - Apache BVal 

你会看到,Tomcat(Web容器/服务器)只是应用服务器阿森纳的另一个工具。 您可以在Web服务器上获得JPA和其他技术,但是应用程序服务器只是将所有这些东西打包,以方便您使用。 要完全分类为应用程序服务器,您基本上需要遵守某些标准所提供的工具列表。

尽pipe两者之间可能会有重叠(一些Web服务器甚至可能被用作应用程序服务器),但恕我直言的最大区别在于处理模型和会话pipe理:

在Web服务器处理模式中,重点在于处理请求; “会话”的概念非常虚拟。 也就是说,通过在客户端和服务器(因此是REST)之间传递状态表示和/或将其序列化到外部永久性存储(SQL Server,Memcached等)来模拟“会话”。

在应用程序服务器中,会话通常更加明确,并且在整个“会话”持续时间中,通常采用应用程序服务器内存中的对象的forms。

实际上Apache是​​一个Web服务器,Tomcat是一个应用服务器。 当HTTP请求到达Web服务器时。 然后静态内容通过Web服务器发送回浏览器。 是否有逻辑要做,然后请求发送到应用程序服务器。 处理完逻辑后,响应发送到Web服务器并发送给客户端。

这取决于具体的架构。 某些应用程序服务器本身可能使用Web协议(XML / RPC / SOAP over HTTP),所以技术上的区别很小。 通常,Web服务器是面向用户的,通过HTTP / HTTPS提供各种内容,而应用服务器不面向用户,可能使用非标准或不可路由的协议。 当然,使用RIA / AJAX,这种差异可能会进一步模糊,仅向服务于特定远程访问服务的客户端提供非HTML内容(JSON / XML)。

一方面,networking服务器通过HTTP协议提供网页内容(HTML和静态内容)。 另一方面,应用程序服务器是一个容器,您可以通过各种协议(包括n层体系结构中的HTTP)来构build业务逻辑和stream程,并将其展示给客户端应用程序。

因此,应用程序服务器比Web服务器提供更多的服务,通常包括:

  • (专有或非专有)API
  • 对象生命周期pipe理,
  • 国家pipe理(会议),
  • 资源pipe理(例如连接池到数据库),
  • 负载平衡,故障转移

Java中的应用程序服务器和Web服务器都用于托pipeJava Web应用程序。 在Java J2EE透视图上,Web服务器和应用程序服务器的主要区别在于对EJB的支持。 为了运行EJB或主机企业Java应用程序(.ear)文件,您需要一个像JBoss,WebLogic,WebSphere或Glassfish这样的应用程序服务器,而您仍然可以在任何Web内运行您的servlet和JSP或Java Web应用程序(.war)文件服务器像Tomcat或Jetty。 Application Server支持分布式事务和EJB。 而Web Server只支持Servlet和JSP。 就Web服务器和应用服务器的逻辑区别而言。 Web服务器应该提供http协议级服务,而应用服务器则提供对Web服务的支持,并提供业务级服务(如EJB)。

在资源利用方面,应用服务器比Web服务器更重。