ChatGPT解决这个技术问题 Extra ChatGPT

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

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

性能方面哪个是更好的应用程序服务器或网络服务器

K
Knowledge Craving

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

以下是 Web Server 和 Application Server 在功能上的一些主要区别:

Web 服务器旨在提供 HTTP 内容。 App Server 也可以提供 HTTP 内容,但不仅限于 HTTP。可以提供RMI/RPC等其他协议支持

Web 服务器主要设计用于提供静态内容,尽管大多数 Web 服务器都有插件来支持 Perl、PHP、ASP、JSP 等脚本语言,这些服务器可以通过这些插件生成动态 HTTP 内容。

大多数应用服务器都将 Web Server 作为其不可或缺的一部分,这意味着 App Server 可以做任何 Web Server 能够做的事情。此外,App Server 具有支持应用程序级服务的组件和功能,例如连接池、对象池、事务支持、消息传递服务等。

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

此类配置的示例是 Apache Tomcat HTTP Server 和 Oracle(以前称为 BEA)WebLogic Server。 Apache Tomcat HTTP Server 是 Web 服务器,Oracle WebLogic 是应用程序服务器。

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


JBoss(现为 WildFly)也是应用服务器的著名示例:D
很好的解释,因为我们可以使用应用程序服务器而不是 Web 服务器,为单个应用程序同时拥有 Web 服务器和应用程序服务器有什么好处?性能方面的最佳选择是什么?
“Apache Tomcat HTTP 服务器是 Web 服务器,Oracle WebLogic 是应用程序服务器。”所以首先,Apache Tomcat 和 Apache HTTP 服务器是两个不同的产品。这并不是一个准确的说法。 Apache Tomcat 是一个应用服务器。当然,它也可以提供网页服务,但它是用于部署 Java 的应用服务器。我意识到很多人松散地使用术语“网络服务器”。但这只会让人们感到困惑。
Apache Tomcat 不是一个 Web 服务器,它是一个运行 Java 服务器的应用程序服务器。 Apache HTTP 服务器是一个 Web 服务器。没有称为 Apache Tomcat HTTP 服务器的服务器。
-1 混淆 Apache Tomcat 和 Apache HTTPD。 stackoverflow.com/questions/30632/…
A
Adrian Mole

这是一些场景的详细答案,可以清楚地了解差异和相似之处,以及两者如何协同工作。

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

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

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

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

https://i.stack.imgur.com/qCgzQ.gif

一个例子:

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

场景 1:没有应用程序服务器的 Web 服务器

您有一个只有 Web 服务器而没有应用程序服务器的在线商店。该网站将提供一个展示,您可以从中选择产品。当您提交查询时,站点会执行查找并将 HTML 结果返回给其客户端。 Web 服务器将您的查询直接发送到数据库服务器(请耐心等待,我将在下一篇文章中解释这一点)并等待响应。收到后,Web 服务器会将响应制定为 HTML 文件并将其发送到您的 Web 浏览器。每次运行查询时都会发生服务器和数据库服务器之间的这种来回通信。

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

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

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


这并不准确/令人困惑,即使对于 Web 应用程序(即术语应用程序服务器适用于非 Web 应用程序)也是如此。仅考虑 Web:Web 服务器包括用于处理 Web 请求 (http) 的软件(apache、nginx)。应用程序服务器包含/公开应用程序(例如 php 代码)。它们可能是同一台机器,也可能不是——例如,在一台机器(Web 服务器)上使用 nginx 将请求转发到另一台本身没有任何机器(应用程序服务器)上的 php-fpm 是正常的http 访问(仅公开 php-fpm 本身的端口)。
@AD7six Web 服务器专门处理 HTTP 请求,而应用程序服务器通过包括 HTTP 在内的任意数量的协议处理应用程序的业务逻辑。
我的观点是应用服务器可以处理http请求,这绝不是一个要求。 the application server deals with several different protocols, including, but not limited, to HTTP <- 表示它确实可以处理 http 请求 - 这是不准确的。
在重新阅读给出的示例之后,我在这里看不到任何真正的清晰度 - 描述主要与缓存有关。需要明确的是,网络服务器是软件,应用程序是软件。如果它们部署在同一台机器上,则可以随意引用该机器。如果它们在不同的机器上,通常将运行 webserver 的一台称为 webserver,将运行应用程序的一台称为 appserver。您通常会根据负载和负载平衡来拆分事物。总的来说,我发现这个答案并没有增加任何有用的东西。
@AD7six 我的回答是为了补充其他答案,即其他答案已经意味着你所问的只是对它的扩展。
J
Jim Ferrans

这两个术语都非常通用,一个包含另一个,在某些情况下反之亦然。

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

应用服务器:托管和公开业务逻辑和流程。

我认为主要的一点是Web服务器通过http协议暴露一切,而应用服务器不限于此。

也就是说,在很多场景中,您会发现 Web 服务器被用于创建应用程序服务器的前端,也就是说,它公开了一组网页,允许用户与在其中找到的业务规则进行交互。应用服务器。


P
Pithikos

网络服务器

运行 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 / 映射到函数 homepage(),将 /about 映射到函数 about()

要运行此代码,我们需要一个应用服务器(例如 Gunicorn)——一个可以监听来自客户端的请求并使用我们的代码动态返回某些内容的程序或模块。在示例中,我们只是返回了一些非常糟糕的 HTML。

其他人都在谈论的业务逻辑是什么?好吧,由于 URL 映射到我们代码库中的某个特定位置,因此我们假设展示了一些关于我们的程序如何工作的逻辑。

重述

Web 服务器 - 提供存储在某处的文件(最常见的是 .css、.html、.js)。常见的 Web 服务器是 Apache、Nginx 甚至 Python 的 SimpleHTTPServer。

应用程序服务器 - 提供动态生成的文件。本质上,大多数 Web 服务器都有某种插件,甚至带有内置功能来做到这一点。也存在严格的应用服务器,如 Gunicorn (Python)、Unicorn (Ruby)、uWSGI (Python) 等。

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


这是最好和最简洁的答案。我想知道是否可以将 Web 服务器视为应用程序服务器的子集。现在我认为它就像一个 Web 服务器就像一个 getter 方法,一个应用程序服务器就像一个工厂方法(其中 URL 是一个构造函数参数:D)
Uff.. 最后,感谢您提供 Python 视角。尽管这个话题看起来与语言无关,但事实并非如此。从未使用过 EJB 的人不会清楚地理解面向 Java 的答案。
谢谢。 “要运行此代码,我们需要一个应用程序服务器”,您能否指定应用程序服务器用于运行烧瓶程序?
这是一个近乎完美的答案
@aderchox 会将 Apache 变成应用服务器。所以不知道你的意思是它不准确。 Nginx 可以用 Lua 扩展,所以你甚至可以让它煮咖啡。这是否意味着 Nginx 也是一个咖啡机?
C
Cheeso

正如 Rutesh 和 jmservera 所指出的,这种区别是模糊的。从历史上看,它们是不同的,但到 90 年代,这两个先前截然不同的类别融合了特征并有效地融合在一起。此时最好将“App Server”产品类别想象为“Web 服务器”类别的严格超集。

一些历史。在 Mosaic 浏览器和超链接内容的早期,出现了一种称为“网络服务器”的东西,它通过 HTTP 提供网页内容和图像。大多数内容是静态的,HTTP 1.0 协议只是一种传送文件的方式。 “Web 服务器”类别很快演变为包括 CGI 功能——有效地在每个 Web 请求上启动一个进程以生成动态内容。 HTTP 也变得成熟,产品变得更加复杂,具有缓存、安全和管理功能。随着技术的成熟,我们从 Kiva 和 NetDynamics 那里获得了公司特定的基于 Java 的服务器端技术,最终都合并到了 JSP 中。微软在 Windows NT 4.0 中添加了 ASP,我认为是在 1996 年。静态 Web 服务器学习了一些新技巧,因此它是许多场景的有效“应用服务器”。

在并行类别中,应用服务器已经发展并存在了很长时间。公司为 Unix 提供了 Tuxedo、TopEnd、Encina 等产品,这些产品在哲学上源自大型机应用程序管理和监控环境,如 IMS 和 CICS。 Microsoft 的产品是 Microsoft Transaction Server (MTS),后来演变成 COM+。这些产品中的大多数都指定了“封闭的”特定于产品的通信协议,以将“胖”客户端与服务器互连。 (对于 Encina,通信协议是 DCE RPC;对于 MTS,是 DCOM;等等。)在 1995/96 年,这些传统的应用服务器产品开始嵌入基本的 HTTP 通信能力,首先是通过网关。线条开始模糊。

Web 服务器在处理更高的负载、更多的并发性和更好的功能方面变得越来越成熟。应用服务器提供了越来越多的基于 HTTP 的通信能力。

此时,“应用服务器”和“Web 服务器”之间的界限是模糊的。但人们继续以不同的方式使用这些术语,作为强调的问题。当有人说“Web 服务器”时,您通常会想到以 HTTP 为中心、Web UI 和面向应用程序。当有人说“应用服务器”时,您可能会想到“更重的负载、企业功能、事务和队列、多通道通信(HTTP + 更多)。但通常它是同时满足两组工作负载需求的同一个产品。

WebSphere,IBM 的“应用服务器”拥有自己的捆绑 Web 服务器。

WebLogic,另一个传统的应用服务器,同样如此。

Windows 是微软的应用服务器(除了是它的文件和打印服务器、媒体服务器等),它捆绑了 IIS。


很明确的答案。但是,您能否详细说明一下允许 Web 服务器作为应用程序服务器执行的“新技巧”。
“新技巧”意味着运行服务器端逻辑。像 ASP 或其他脚本逻辑。最初的“网络服务器”只是从文件系统返回静态内容。现在,我们已经走了很长一段路。
我读了很多关于“企业功能”的文章。你能详细说明一下吗?
C
Community

正如许多人之前所说,Web 服务器处理 HTTP 请求,而应用程序服务器处理分布式组件的请求。因此,了解差异的最简单方法可能是比较这两种产品提供的编程环境。

Web 服务器 -> 编程环境

IIS:ASP(.NET)

Tomcat:小服务程序

码头:Servlet

阿帕奇:PHP,CGI

应用服务器 -> 编程环境

MTS:COM+

是:EJB

JBoss : EJB

WebLogic 应用服务器:EJB

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

其他功能,如负载平衡、集群、会话故障转移、连接池等,以前属于应用程序服务器领域,现在也可以直接或通过某些第三方产品在 Web 服务器上使用。

最后,值得注意的是,像 Spring Framework 这样的“轻量级容器”进一步扭曲了这种情况,这些容器通常以更简单的方式补充应用程序服务器的目的,并且没有应用程序服务器基础设施。并且由于应用程序中的分布方面正在从分布式组件转向服务范式和 SOA 架构,因此留给传统应用程序服务器的空间越来越少。


您列出的任何应用程序服务器都可以用作 apache http 之类的 http Web 服务器吗?
a
ahmednabil88

简而言之,
The web server 是通过 HTTP 请求向用户提供静态网页的服务器。
The application server 是托管系统业务逻辑的服务器。
它通常托管长时间运行/批处理和/或不适合人类消费的互操作服务(REST/JSON 服务、SOAP、RPC 等)。


术语“主机的业务逻辑”是什么意思?它是如何执行的?
业务逻辑是否通过 Web 服务暴露给客户端?
它可以通过 Web 服务提供,也可以通过任何其他接口提供(TCP、MQ、共享上的平面文件(我不推荐最后一个))。
这可能会产生误导。应用程序服务器不托管任何东西。您的代码承载业务逻辑,应用程序服务器充当该业务逻辑与用户请求的网页之间的粘合剂。
谁把所有这些令人困惑的术语带到了各处,到处都是模棱两可的定义?
A
Arun Raaj

Web 服务器和应用程序服务器之间的主要区别在于,Web 服务器旨在为静态页面提供服务,例如 HTML 和 CSS,而应用程序服务器负责通过执行服务器端代码(例如 JSP、Servlet 或 EJB)来生成动态内容。

我应该使用哪一个?
一旦您了解了 Web 和应用程序服务器以及 Web 容器之间的区别,就很容易弄清楚何时使用它们。如果您提供静态网页,则需要像 Apache HTTPD 这样的 web server。如果您的 Java 应用程序仅使用 JSP 和 Servlet 来生成动态内容,那么您需要 web containers,例如 Tomcat 或 Jetty。然而,如果您有使用 EJB、分布式事务、消息传递和其他奇特功能的 Java EE 应用程序,那么您需要一个成熟的 application server,例如 JBoss、WebSphere 或 Oracle 的 WebLogic。

Web 容器是 Web Server 的一部分,Web Server 是 Application Server 的一部分。

https://i.stack.imgur.com/vdVTy.png

Web Server 由 Web 容器组成,而 Application Server 由 Web 容器和 EJB 容器组成。


“Web Server由Web容器组成”:根据youtu.be/ATObcDPLa40这个视频,它是错误的
A
Arjan Tijms

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

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

A(专有或非专有)API

负载均衡、故障转移...

对象生命周期管理

状态管理(会话)

资源管理(例如到数据库的连接池)

大多数应用服务器都将 Web Server 作为其不可或缺的一部分,这意味着 App Server 可以做任何 Web Server 能够做的事情。此外,App Server 具有支持应用程序级服务的组件和功能,例如连接池、对象池、事务支持、消息传递服务等。

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

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

此类配置的示例是 Apache HTTP Server 和 BEA WebLogic Server。 Apache HTTP 服务器是 Web 服务器,BEA WebLogic 是应用程序服务器。在某些情况下,服务器紧密集成,例如 IIS 和 .NET 运行时。 IIS 是网络服务器。当配备 .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+

有一些提到其他的东西,但很多对我来说似乎是抄袭。就像最后的列表一样,好像是从丹的帖子中复制的。并且“...反向代理到应用程序服务器...”最后还使用 HTTP Server 和 BEA WebLogic Server 作为示例,这与 Rutesh Makhijani 所写的内容几乎相同。
D
Dilruk

这两者之间的界限越来越细。

应用程序服务器向客户端公开业务逻辑。这意味着应用程序服务器由一组方法组成(尽管不完全是,甚至可以是允许许多人在其上运行软件的联网计算机)来执行业务逻辑。所以它只会输出想要的结果,而不是 HTML 内容。 (类似于方法调用)。所以它不是严格基于 HTTP 的。

但是 Web 服务器将 HTML 内容传递给 Web 浏览器(严格基于 HTTP)。 Web 服务器只能处理静态 Web 资源,但服务器端脚本的出现允许 Web 服务器也可以处理动态内容。 Web 服务器接收请求并将其定向到相关脚本(PHP、JSP、CGI 脚本等)以创建要发送到客户端的 HTML 内容。收到内容后,Web 服务器会将 HTML 页面发送给客户端。

但是,现在这两个服务器一起使用。 Web 服务器接受请求,然后调用脚本来创建 HTML 内容。然后,该脚本将再次调用应用服务器LOGIC(例如检索交易细节)来填充HTML 内容。

所以这两个服务器都被有效地使用了。

因此....我们可以肯定地说,如今,在大多数情况下,Web 服务器被用作应用程序服务器的子集。但在戏剧上并非如此。

我已经阅读了很多关于这个主题的文章,发现 this 文章非常方便。


戏剧性->理论上?
A
Arsen Khachaturyan

在 Java 术语中,还有一个:Web 容器(或更严格地说,是 servlet 容器)。例如,它位于 Web 服务器和应用程序服务器之间。

Java 术语中的 Web 容器是一种应用服务器,基本上只实现了 Java EE 的 JSP/Servlet 部分,缺少 Java EE 的几个核心部分,例如 EJB 支持。一个例子是 Apache Tomcat。


J
Joseph

应用程序服务器通常被设计和部署以促进运行时间更长的进程,这些进程也将更加资源密集。

Web 服务器通常用于资源密集型的短时间突发。这主要是为了方便提供基于 Web 的流量。


R
Robert S.

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

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

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


C
Charles Bretana

应用程序服务器是一台机器(实际上是在某台机器上运行的可执行进程),它“侦听”(在任何通道上,使用任何协议),接收来自客户端对其提供的任何服务的请求,然后根据这些请求执行某些操作。 (可能会或可能不会涉及对客户的回应)

Web 服务器是在一台机器上运行的进程,它使用“互联网”协议之一(http、https、ftp 等)专门在 TCP/IP 通道上“侦听”,并根据这些传入请求执行任何操作。 .. 通常,(如最初定义的那样),它获取/生成一个 html 网页并将其返回给客户端,或者从服务器上的静态 html 文件中获取,或者根据传入的客户端请求中的参数动态构建。


你能举个浴盒的例子吗?
你能提供两者的例子吗?谢谢。
P
Pascal Thivent

首先,Web 服务器通过 HTTP 协议提供 Web 内容(HTML 和静态内容)。另一方面,应用服务器是一个容器,您可以在其上构建业务逻辑和流程,并通过各种协议(包括 n 层架构中的 HTTP)向客户端应用程序公开业务逻辑和流程。

因此,应用服务器提供的服务比 Web 服务器多得多,后者通常包括:

A(专有或非专有)API

对象生命周期管理,

状态管理(会话),

资源管理(例如到数据库的连接池),

负载均衡、故障转移...

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


M
MarkPowell

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


C
Chandra

基本理解:

在客户端服务器架构中

服务器 :> 为请求提供服务。客户 :> 哪个消耗服务。

Web 服务器和应用程序服务器都是充当客户端服务器的软件应用程序。

他们的名字是根据他们的使用地点来命名的。

Web server :> serve web content
           :> Like Html components
           :> Like Javascript components
           :> Other web components like images,resource files
           :> Supports mainly web protocols like http,https.
           :> Supports web Request & Response formats.

使用——我们需要低处理率,涉及常规处理实践。例如:所有平面服务器通常都是现成的,仅提供基于 Web 的内容。

Application server :> Serve application content/component data(Business data).
                   :> These are special kind which are custom written 
                      designed/engineered for specific
                      purpose.some times fully unique in 
                      their way and stands out of the crowd. 

                   :> As these serves different types of data/response contents
                   :> So we can utilize these services for mobile client,web 
                      clients,intranet clients. 
                   :> Usually application servers are services offered on different 
                      protocols.    
                   :> Supports different Request& Response formats.

用法——我们需要多点处理,专门的处理技术涉及人工智能。例如:谷歌地图服务器、谷歌搜索服务器、谷歌文档服务器、微软 365 服务器、微软人工智能计算机视觉服务器。

我们可以将它们假设为 4 层/n 层架构中的层/层次结构。

 So they can provide 
                    load balancing,
                    multiple security levels,
                    multiple active points,
                    even they can provide different request processing environments.

请点击此链接了解标准架构类比:

https://docs.microsoft.com/en-us/previous-versions/msp-n-p/ee658120(v%3dpandp.10)


A
Amila

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


G
Gerrit Brink

以上所有只是使非常简单的事情过于复杂。应用程序服务器包含一个 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 和其他技术,但应用程序服务器只是为了您的方便而打包了所有这些东西。要完全归类为应用服务器,您基本上需要遵守某些标准规定的工具列表。


P
Peter Recore

不一定有明确的分界线。如今,许多程序结合了两者的元素 - 服务 http 请求(Web 服务器)和处理业务逻辑(应用程序服务器)


M
Manohar Reddy Poreddy

来自https://en.wikipedia.org/wiki/Web_server

Web 服务器是一种通过 HTTP 处理请求的计算机系统,HTTP 是用于在万维网上分发信息的基本网络协议。该术语可以指整个系统,或者专门指接受和监督 HTTP 请求的软件。

来自https://en.wikipedia.org/wiki/Application_server#Application_Server_definition

应用服务器在 Web 服务器(例如 Apache 或 Microsoft Internet Information Services (IIS))之后运行,并且(几乎总是)在 SQL 数据库(例如 PostgreSQL、MySQL 或 Oracle)之前运行。

Web 应用程序是在应用程序服务器上运行并以应用程序服务器支持的语言编写并调用应用程序服务器提供的运行时库和组件的计算机代码。


s
stdout

IMO,主要是关于分离关注点。

从纯技术的角度来看,您可以在单个 Web 服务器中完成所有事情(Web 内容 + 业务逻辑)。如果您这样做,那么信息将嵌入到请求的 HTML 内容中。会有什么影响?

例如,假设您有 2 个不同的应用程序,它们在浏览器上呈现完全不同的 HTML 内容。如果您将业务逻辑分离到一个应用程序服务器中,那么您可以提供不同的 Web 服务器通过脚本在应用程序服务器中查找相同的数据。但是,如果您不分离逻辑并将其保留在 Web 服务器中,那么无论何时更改您的业务模型,您最终都会在您拥有的每一个 Web 服务器中更改它,这将花费更多时间,更不可靠并且容易出错。


B
Bablu Ahmed

应用程序服务器和 Web 服务器都用于托管 Web 应用程序。 Web Server 处理 Web 容器,而 Application Server 处理 Web 容器以及 Microsoft dot Net 的 EJB(Enterprise JavaBean)容器或 COM+ 容器。

Web Server 旨在提供 HTTP 静态内容,如 HTML、图像等,动态内容有插件支持 Perl、PHP、ASP、JSP 等脚本语言,并且仅限于 HTTP 协议。以下服务器可以生成动态 HTTP 内容。

Web 服务器的编程环境:

IIS:ASP(.NET)

Apache Tomcat:Servlet

码头:Servlet

阿帕奇:PHP,CGI

Application Server 可以做任何 Web Server 能够做的事情,并使用任何协议进行侦听,并且 App Server 具有支持应用程序级服务的组件和功能,例如连接池、对象池、事务支持、消息传递服务等。

应用服务器的编程环境:

MTS:COM+

是:EJB

JBoss:EJB

WebLogic 应用服务器:EJB


b
blue_note

Web 服务器:对于每个 URL,它都会返回一个文件。这就是它所做的一切。该文件是静态内容,这意味着它在您发出请求之前存储在服务器中的某个位置。最流行的 Web 服务器是 apache http 和 nginx。

应用服务器:对于每个 URL,它运行一些代码,用某种语言编写,生成响应并返回它。响应不是预先存在的,它是为您的特定请求生成的,即它是动态内容。每种语言的应用程序服务器都不同。一些流行的例子是 java 的 tomcat/jetty,python 的 uwsgi/gunicorn。

几乎您访问的每个页面都使用两者。静态内容(例如,图像、视频)由 Web 服务器提供,其余的(您与其他用户不同的部分)由应用程序服务器生成。


Apache 带有 mod_cgi、mod_perl、mod_php 等,是一个应用服务器,那么呢? .NET Core 的 Kestrel 是什么,它是 .NET 特有的,在进程中运行并为应用程序提供 HTTP 服务器功能?
B
BeastCoder

IBM makes a really nice comparison between the two

根据严格的定义,Web 服务器是应用程序服务器的公共子集。 Web 服务器主要响应来自 Web 浏览器的超文本传输协议 (HTTP) 请求来提供静态 Web 内容,例如 HTML 页面、文件、图像、视频。应用程序服务器通常也可以交付 Web 内容,但它的主要工作是支持最终用户客户端和服务器端应用程序代码(表示通常称为业务逻辑的代码)之间的交互,以生成和交付动态内容,例如事务结果、决策支持或实时分析。应用程序服务器的客户端可以是应用程序自己的最终用户 UI、Web 浏览器或移动应用程序,并且客户端-服务器交互可以通过任意数量的通信协议进行。然而,在实践中,Web 服务器和应用程序服务器之间的界限变得更加模糊,特别是随着 Web 浏览器已成为首选的应用程序客户端以及用户对 Web 应用程序和 Web 应用程序性能的期望不断提高。大多数 Web 服务器支持脚本语言(例如 ASP、JSP、PHP、Perl)的插件,这些插件使 Web 服务器能够基于服务器端逻辑生成动态内容。越来越多的应用服务器不仅包含 Web 服务器功能,而且使用 HTTP 作为其主要协议并支持其他协议(例如,CGI 和 CGI 变体)与 Web 服务器接口。它们还允许 Web 应用程序利用反向代理、集群、冗余和负载平衡等服务——这些服务可以提高性能和可靠性,并允许开发人员减少对基础设施的关注,而更多地关注编码。更令人困惑的是,许多 Web 服务器和一些应用程序服务器被称为或称自己为 Web 应用程序服务器。底线是当今最流行的 Web 服务器和应用程序服务器是两者的混合体。您今天使用的大多数日益丰富的应用程序都具有静态 Web 内容和动态应用程序内容的组合,通过 Web 服务器和应用程序服务器技术的组合交付。


A
Andriy Volkov

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

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

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


C
Cade Roux

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


p
pasignature

从上面令人敬畏的 SO 传播者的帖子中得出我的结论,我得出结论,两者都是驻留在实际金属服务器(物理服务器)上的软件。两者携手合作,为最终用户提供服务。然后,根据设置,我们可以选择如何调用它,这意味着如何描述它取决于实际使用的设置。如果它们都驻留在同一个裸机(物理服务器)上,我们称它为 Web 和应用程序服务器……很简单!如果在不同的机器上,显然,我们手上有两个不同的裸机(物理服务器)。然后我们可以根据它们的功能对这些服务器进行标记:一个 Web 服务器和另一个应用程序服务器。

https://i.stack.imgur.com/lcsd.png