应用服务器和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服务器:使用http协议向Web提供内容。应用程序服务器:托管并公开业务逻辑和流程。
我认为主要的一点是web服务器通过http协议公开所有内容,而应用程序服务器不限于此。
也就是说,在许多情况下,您会发现web服务器被用于创建应用程序服务器的前端,即它公开了一组网页,允许用户与应用程序服务器中的业务规则进行交互。
首先,web服务器通过HTTP协议提供web内容(HTML和静态内容)。另一方面,应用程序服务器是一个容器,您可以在该容器上构建业务逻辑和流程,并通过各种协议(包括n层架构中的HTTP)将其公开给客户端应用程序。
因此,应用服务器提供比web服务器多得多的服务,web服务器通常包括:
A(专有或非专有)API对象生命周期管理,状态管理(会话),资源管理(例如,到数据库的连接池),负载平衡、故障转移。。。
AFAIK,ATG Dynamo是90年代后期最早的应用服务器之一(根据上面的定义)。在2000年初,它是一些专有应用服务器的统治,如ColdFusion(CFML AS)、BroadVision(服务器端JavaScript AS)等。
这两者之间的边界越来越薄。
应用程序服务器向客户端公开业务逻辑。这意味着应用程序服务器由一组执行业务逻辑的方法组成(但不限于此,甚至可以是一台网络计算机,允许许多人在其上运行软件)。因此,它只会输出所需的结果,而不是HTML内容。(类似于方法调用)。因此,它不是严格基于HTTP的。
但web服务器将HTML内容传递给web浏览器(严格基于HTTP)。Web服务器只能处理静态Web资源,但服务器端脚本的出现也允许Web服务器处理动态内容。web服务器接收请求并将其引导到相关脚本(PHP、JSP、CGI脚本等),以创建要发送到客户端的HTML内容。一旦接收到内容,web服务器将向客户端发送HTML页面。
然而,现在这两个服务器都一起使用。web服务器接收请求,然后调用脚本来创建HTML内容。然后,脚本将再次调用应用程序服务器LOGIC(例如检索事务细节)来填充HTML内容。
因此这两个服务器都得到了有效的使用。
因此我们可以放心地说,现在,在大多数情况下,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服务器和应用程序服务器技术的组合提供。
这是一个详细的答案,其中包含一些场景,以清楚地了解差异和相似性,以及两者如何协同工作。
Application Server是一个有时与web服务器混合使用的术语。虽然web服务器主要处理HTTP协议,但应用程序服务器处理几种不同的协议,包括但不限于HTTP。
Web服务器的主要工作是显示站点内容,应用程序服务器负责逻辑、用户和显示内容之间的交互。应用服务器与web服务器协同工作,其中一个显示,另一个交互。
服务器和客户端之间来回传递的信息不限于简单的显示标记,而是两者之间的交互。
在大多数情况下,服务器通过组件API创建这种交互,例如J2EE(Java 2平台)、EJB(Enterprise JavaBean)和其他不同的应用程序软件模型。
例如:
了解应用程序服务器与web服务器协同工作的场景与没有应用程序服务器的场景之间差异的最佳方式是通过在线商店。
场景1:没有应用程序服务器的Web服务器
您有一个只有web服务器而没有应用程序服务器的在线商店。该网站将提供一个显示,您可以从中选择产品。当您提交查询时,站点执行查找并将HTML结果返回给其客户端。web服务器将您的查询直接发送到数据库服务器(请耐心等待,我将在下一篇文章中解释这一点)并等待响应。一旦收到响应,web服务器就会将响应格式化为HTML文件,并将其发送到web浏览器。每次运行查询时,服务器和数据库服务器之间的来回通信都会发生。
场景2:带有应用程序服务器的Web服务器
如果您要运行的查询之前已经完成,并且此后没有数据更改,那么服务器将生成结果,而无需将请求发送到数据库服务器。这允许实时查询,其中第二个客户端可以访问相同的信息并接收实时可靠的信息,而无需向数据库服务器发送另一个重复查询。服务器基本上充当数据库服务器和web服务器之间的中间层。这允许提取的信息可重复使用,而在第一个场景中,由于该信息嵌入到特定的“自定义”HTML页面中,因此这不是一个可重复使用的过程。第二个客户端将不得不再次请求信息,并接收另一个包含所请求信息的HTML嵌入页面——效率很低。更不用说,这种类型的服务器非常灵活,因为它能够管理自己的资源,包括安全性、事务处理、消息传递和资源池。
为了支持如此多种复杂的任务,该服务器必须具有内置的冗余、强大的处理能力和大量的RAM,以实时处理其提取的所有数据。