应用服务器和Web服务器有什么区别?
大多数情况下,Web服务器和应用程序服务器这两个术语可以互换使用。
以下是Web服务器和应用程序服务器功能特性方面的一些关键区别:
这样的配置示例是Apache Tomcat HTTP服务器和Oracle(曾用名BEA)WebLogic服务器。Apache Tomcat HTTP服务器是Web服务器,Oracle WebLogic是应用程序服务器。
在某些情况下,服务器是紧密集成的,例如IIS和.NET运行时。IIS是Web服务器。当配备有.NET运行时环境时,IIS能够提供应用程序服务。
以下是一份详细的答案,其中包含一些场景,以便更清楚地了解二者的差异和相似之处,以及它们如何共同工作。
应用服务器是一个有时与Web服务器混淆的术语。虽然Web服务器主要处理HTTP协议,但应用服务器处理几种不同的协议,包括但不限于HTTP。
Web服务器的主要工作是显示网站内容,而应用服务器则负责逻辑,用户与显示内容之间的交互。应用服务器与Web服务器共同工作,其中一个显示内容,另一个进行交互。
在服务器和客户端之间来回传输的信息不仅限于简单的展示标记,还包括两者之间的交互。
在大多数情况下,服务器通过组件API(例如J2EE(Java 2平台),EJB(企业JavaBean)和其他不同的应用软件模型)创建此交互。
一个示例:
理解应用服务器与Web服务器共同工作的场景和没有应用服务器的场景之间差异的最佳方式是通过一个在线商店。
场景1:没有应用服务器的Web服务器
你有一个只有Web服务器而没有应用服务器的在线商店。该站点提供一个显示屏,您可以从中选择产品。当您提交查询时,网站执行查找并将HTML结果返回给其客户端。Web服务器直接将您的查询发送到数据库服务器(请耐心等待,我将在我们的下一个要点中解释这一点),并等待响应。一旦收到,Web服务器将响应制成HTML文件并将其发送到您的Web浏览器。每次运行查询时,服务器和数据库服务器之间的来回通信都会发生。
情境2:带有应用服务器的Web服务器
如果要运行的查询已经以前完成,且数据自那之后未更改,则服务器将生成结果,而无需将请求发送到数据库服务器。这允许实时查询,其中第二个客户端可以访问相同的信息并接收实时、可靠的信息,而无需向数据库服务器发送另一个重复查询。服务器基本上充当数据库服务器和Web服务器之间的中间人。这使得所提取的信息可以被重复使用,而在第一种情况下,由于此信息嵌入在特定和“定制”的HTML页面中,这不是一个可重复使用的过程。第二个客户端将不得不再次请求信息并接收包含所请求信息的另一个嵌入式HTML页面-非常低效。更不用说这种类型的服务器非常灵活,因为它能够管理自己的资源,包括安全性、事务处理、消息传递和资源池。
为了支持如此多样化的复杂任务,此服务器必须具有内置的冗余性、强大的处理能力和大量的RAM以处理所有实时获取的数据。
这两个术语非常通用,有些情况下一个包含另一个,反之亦然。
Web服务器:使用http协议向web提供内容。
应用服务器:托管和暴露业务逻辑和流程。
我认为主要的观点是,Web服务器通过http协议公开所有内容,而应用服务器并不限于此。
话虽如此,在许多场景中,您会发现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()”。正如Rutesh和jmservera提到的那样,这种区分是模糊的。历史上,它们是不同的,但在90年代,这两个之前明显不同的类别融合了特性并有效地合并了。此时最好想象“应用服务器”产品类别是“Web服务器”类别的严格超集。
简要历史。在Mosaic浏览器和超链接内容的早期,出现了一种被称为“Web服务器”的东西,它通过HTTP提供Web页面内容和图像。大多数内容都是静态的,而HTTP 1.0协议只是一种将文件传输到各处的方式。很快,“Web服务器”类别就发展成为包括CGI功能的东西——每次Web请求启动一个进程以生成动态内容。HTTP也变得更加成熟,产品变得更加复杂,具备缓存、安全和管理功能。随着技术的成熟,我们从Kiva和NetDynamics得到了公司特定的基于Java的服务器端技术,最终合并为JSP。我认为微软在1996年将ASP添加到Windows NT 4.0中。静态Web服务器学会了一些新技巧,因此对于许多情况来说,它是一个有效的“应用服务器”。
在一个平行的类别中,应用服务器已经发展并存在了很长时间。公司为类Unix的Tuxedo、TopEnd和Encina提供了产品,这些产品在哲学上源自于像IMS和CICS这样的主机应用程序管理和监视环境。微软的产品是Microsoft Transaction Server(MTS),后来演变成COM+。大多数这些产品规定了“封闭”的产品特定通信协议,以将“肥厚”的客户端连接到服务器。(对于Encina,通信协议是DCE RPC;对于MTS,它是DCOM等)。在1995/96年,这些传统的应用服务器产品开始通过网关嵌入基本的HTTP通信能力。然后这些界线开始变得模糊。
Web服务器越来越成熟,可以处理更高的负载、更多的并发和更好的功能。应用服务器提供了越来越多的基于HTTP的通信功能。
目前,"应用服务器"和"Web服务器"之间的界限变得模糊不清。但是人们继续以不同的方式使用这些术语,以强调各自的特点。当有人说"Web服务器"时,通常会想到面向HTTP、Web UI的应用程序。而当有人说"应用服务器"时,您可能会想到"更重的负载、企业级功能、事务和队列、多通道通信(HTTP+更多)"。但实际上,同一产品经常为两组工作负载需求提供服务。
正如许多人之前所说,Web服务器处理HTTP请求,而应用服务器处理分布式组件的请求。因此,也许最容易理解两个产品之间的区别是对它们提供的编程环境进行比较。
IIS:ASP(.NET)
Tomcat:Servlet
Jetty:Servlet
Apache:Php、CGI
MTS:COM+
WAS:EJB
JBoss:EJB
WebLogic应用服务器:EJB
重要的区别在于应用服务器支持一些分布式组件技术,提供远程调用和分布式事务等功能,例如Java世界中的EJB或Microsoft平台上的COM+。HTTP服务器通常支持一些更简单的编程环境,通常是脚本语言,例如Microsoft的ASP(.NET)或基于Servlet的JSP和许多其他语言,以及Apache的PHP和CGI。
其他功能,如负载平衡、集群、会话故障转移、连接池等曾经属于应用服务器领域,现在也可以直接或通过某些第三方产品在Web服务器上实现。
最后值得注意的是,像Spring框架这样的“轻量级容器”通常以更简单的方式补充应用服务器的作用,而无需应用服务器基础设施。由于应用程序中的分布方面正在从分布式组件向服务范例和SOA架构转移,传统的应用程序服务器留下的空间越来越少。
Web服务器和应用服务器的主要区别在于,Web服务器用于服务于静态页面(例如HTML和CSS),而应用服务器则通过执行服务器端代码(例如JSP、Servlet或EJB)来生成动态内容。
我应该使用哪一个?
一旦你了解了Web服务器、应用服务器和Web容器之间的区别,就很容易确定何时使用它们。
如果你正在提供静态网页,那么你需要像Apache HTTPD这样的Web服务器
。如果你有一个只使用JSP和Servlet来生成动态内容的Java应用程序,则需要像Tomcat或Jetty这样的Web容器
。然而,如果你有使用EJB、分布式事务、消息和其他高级功能的Java EE应用程序,则需要像JBoss、WebSphere或Oracle的WebLogic这样的完整的应用服务器
。
Web容器是Web服务器的一部分,而Web服务器则是应用服务器的一部分。
Web服务器由Web容器组成,而应用服务器由Web容器和EJB容器组成。
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+