应用服务器和web服务器之间的区别是什么?


当前回答

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服务器和应用程序服务器技术的组合提供。

其他回答

Web服务器

运行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服务器旨在为静态页面(如HTML和CSS)提供服务,而应用程序服务器负责通过执行服务器端代码(如JSP、Servlet或EJB)生成动态内容。

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

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

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

这取决于具体的体系结构。一些应用程序服务器可能在本地使用web协议(XML/RCP/SOAP over HTTP),因此技术上几乎没有差别。通常,web服务器面向用户,通过HTTP/HTTPS提供各种内容,而应用服务器不面向用户,可能使用非标准或不可路由的协议。当然,使用RIA/AAJAX,差异可能会更加模糊,只向客户提供非HTML内容(JSON/XML),从而提供特定的远程访问服务。

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

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

从上面那些很棒的SO福音传道者的帖子中得出我的结论,我得出结论,两者都是驻留在实际金属服务器(物理服务器)上的软件。两者携手合作,为最终用户提供服务。然后,根据设置,我们可以选择调用它,这意味着如何描述它取决于实际使用的设置。如果它们都位于同一个裸机(物理服务器)上,我们称之为web和应用服务器。。。易于理解的如果在不同的机器上,显然,我们手中有两个不同的裸机(物理服务器)。然后,我们可以根据这些服务器的功能来标记它们:一个web服务器和另一个应用程序服务器。