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

893

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

28个回答

3

应用服务器和Web服务器都用于托管Web应用程序。 Web服务器处理Web容器,而应用服务器既处理Web容器,也处理EJB(企业JavaBean)容器或Microsoft dot Net的COM +容器。

Web服务器专门用于提供HTTP静态内容,例如HTML、图像等,并为动态内容提供插件以支持Perl、PHP、ASP、JSP等脚本语言,但它仅限于HTTP协议。以下服务器可以生成动态HTTP内容。

Web服务器的编程环境:

IIS:ASP(.NET)

Apache Tomcat:Servlet

Jetty:Servlet

Apache:Php、CGI

应用服务器可以执行Web服务器所能执行的所有操作,并使用任何协议进行侦听,同时应用服务器具有组件和功能,支持应用级服务,如连接池、对象池、事务支持、消息传递服务等。

应用服务器的编程环境:

MTS:COM +

WAS:EJB

JBoss:EJB

WebLogic应用服务器:EJB


3
我认为这主要是关于分离关注点的问题。
从纯技术角度来看,您可以在单个Web服务器中完成所有内容(Web内容+业务逻辑)。如果您这样做,那么信息将嵌入请求的HTML内容中。会产生什么影响呢?
例如,假设您有两个不同的应用程序,在浏览器上呈现完全不同的HTML内容。如果您将业务逻辑分离到应用程序服务器中,则可以通过脚本提供查找相同数据的不同Web服务器。但是,如果您不分离逻辑并将其保留在Web服务器中,则每当更改业务模型时,您将不得不在每个Web服务器中进行更改,这将需要更多时间,不太可靠且容易出错。

2
虽然两者之间可能存在重叠(有些Web服务器甚至可以用作应用服务器),但在处理模型和会话管理方面最大的区别在于:
Web服务器处理模型的重点是处理请求;“会话”的概念几乎完全是虚拟的。这意味着,“会话”是通过在客户端和服务器之间传输状态的表示,即REST,并/或将其序列化到外部持久存储(SQL Server、Memcached等)来模拟的。
在应用服务器中,会话通常更明确,通常采用一个对象的形式存在于应用服务器的内存中,以整个“会话”的时间为周期。

2
IBM做了一个非常好的比较,比较了这两个。
严格定义上,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服务器和应用服务器技术的组合进行传递。

2

来自https://zh.wikipedia.org/wiki/网页服务器

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

来自https://zh.wikipedia.org/wiki/应用服务器#应用服务器定义

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

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


2
  • Web服务器:对于每个URL,它返回一个文件。这就是它的全部功能。该文件是静态内容,也就是说,在您发起请求之前,它已经存储在服务器上了。最流行的Web服务器是Apache HTTPNginx
  • 应用服务器:对于每个URL,它会运行一些用某种语言编写的代码,生成响应并返回给您。响应事先不存在,是为您特定的请求生成的,也就是说,它是动态内容。每种语言都有不同的应用服务器。一些流行的例子是Java的Tomcat/Jetty,Python的uWSGI/Gunicorn等。

几乎每个您访问的页面都同时使用这两种服务器。Web服务器提供静态内容(例如图像、视频),而应用服务器则生成其余部分(即您与其他用户之间的差异部分)。


Apache配合mod_cgi、mod_perl、mod_php等是一个应用服务器,那.NET Core的Kestrel呢?它是专门针对.NET的,运行在进程中,并为应用程序提供HTTP服务器功能。 - Palec

1
从以上一些很棒的SO传教士的帖子中得出结论,我认为两者都是驻留在实际金属服务器(物理服务器)上的软件。它们共同努力为最终用户提供服务。然后,根据设置,我们可以选择称其为什么,这意味着如何描述它取决于实际使用的设置。如果它们都驻留在同一台裸金属(物理服务器)上,我们称之为Web和应用程序服务器……简单!如果在不同的机器上,显然,我们手头有两个不同的裸金属(物理服务器)。然后,我们可以根据其功能标记这些服务器:一个Web服务器和另一个应用程序服务器。

Web Server vs App Server


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接