WEBserver、应用程序server、HTTPserver差别

WEBserver、应用程序server、HTTPserver差别

  WEBserver、应用程序server、HTTPserver有何差别?IIS、Apache、Tomcat、Weblogic、WebSphere都各属于哪种server,这些问题困惑了非常久,今天最终梳理清楚了:

-Webserver的基本功能就是提供Web信息浏览服务。它仅仅需支持HTTP协议、HTML文档格式及URL。

与client的网络浏览器配合。由于Webserver主要支持的协议就是HTTP,所以通常情况下HTTPserver和WEBserver是相等的(有没有支持除HTTP之外的协议的webserver,作者没有考证过),说的是一回事。

  应用程序server(简称应用server),我们先看一下微软对它的定义:”我们把应用程序server定义为“作为server运行共享业务应用程序的底层的系统软件”。 就像文件server为非常多用户提供文件一样,应用程序server让多个用户能够同一时候使用应用程序(一般是客户创建的应用程序)”

  通俗的讲,Webserver传送(serves)页面使浏览器能够浏览。然而应用程序server提供的是client应用程序能够调用(call)的方法(methods)。确切一点。你能够说:Webserver专门处理HTTP请求(request),可是应用程序server是通过非常多协议来为应用程序提供(serves)商业逻辑 (business logic)。

  以Java EE为例,Webserver主要是处理静态页面处理和作为 Servlet容器,解释和运行servlet/JSP,而应用server是运行业务逻辑的,主要是EJB、 JNDI和JMX API等J2EE API方面的,还包括事务处理、数据库连接等功能,所以在企业级应用中。应用server提供的功能比WEBserver强大的多。

  以这样的定义,IIS、Apache、Tomcat都能够属于Webserver,Weblogic、WebSphere都属于应用server。

  Apache:在Webserver中,Apache是纯粹的Webserver,常常与Tomcat配对使用。它对HTML页面具有强大的解释能力。可是不能解释嵌入页面内的server端脚本代码(JSP/Servlet)。

  Tomcat:早期的Tomcat是一个嵌入Apache内的JSP/Servlet解释引擎Apache+Tomcat就相当于IIS+ASP。后来的Tomcat已不再嵌入Apache内。Tomcat进程独立于Apache进程运行。 并且,Tomcat已经是一个独立的Servlet和JSP容器,业务逻辑层代码和界面交互层代码能够分离了。

因此,有人把Tomcat叫做轻量级应用server。

  IIS:微软早期的IIS。就是一个纯粹的Webserver。

后来,它嵌入了ASP引擎。能够解释VBScript和JScriptserver端代码了。这时,它就能够兼作应用server。

当然。它与J2EE应用server根本无法相比,可是,从功能上说,从原理上说,它勉强能够称之为应用server。确切地说,它是兼有一点应用server功能的Webserver。

  综上:Apache是纯粹的webserver。而Tomcat和IIS由于具有了解释运行server端代码的能力,能够称作为轻量级应用server或带有server功能的Webserver。Weblogic、WebSphere由于能提供强大的J2EE功能。毫无疑问是绝对的应用server。对于处于中间位置的Tomcat,它能够配合纯WebserverApache一起使用,也能够作为应用server的辅助与应用server一起部署:

  • 一、Tomcat与应用server

      到眼下为止,Tomcat一直被觉得是Servlet/JSP API的运行器,也就所谓的Servlet容器。然而,Tomcat并不仅仅如此,它还提供了JNDI和JMX API的实现机制。尽管如此,Tomcat仍然还不能算是应用server,由于它不提供大多数J2EE API的支持。

      非常有意思的是,眼下很多的应用server通常把Tomcat作为它们Servlet和JSP API的容器。由于Tomcat同意开发人员仅仅需通过增加一行致谢,就能够把Tomcat嵌入到它们的应用中。遗憾的是。很多商业应用server并没有遵守此规则。

      对于开发人员来说,假设是为了寻找利用Servlet、JSP、JNDI和JMX技术来生成Java Web应用的话。选择Tomcat是一个优秀的解决方式;可是为了寻找支持其他的J2EE API,那么寻找一个应用server或者把Tomcat作为应用server的辅助。将是一个不错的解决方式;第三种方式是找到独立的J2EE API实现,然后把它们跟Tomcat结合起来使用。尽管整合会带来相关的问题,可是这样的方式是最为有效的。

  • 二、Tomcat与Webserver

      Tomcat是提供一个支持Servlet和JSP运行的容器。Servlet和JSP能依据实时须要。产生动态网页内容。而对于Webserver来说。 Apache仅仅支持静态网页,对于支持动态网页就会显得无能为力;Tomcat则既能为动态网页服务。同一时候也能为静态网页提供支持。尽管它没有通常的Webserver快、功能也不如Webserver丰富,可是Tomcat逐渐为支持静态内容不断扩充。大多数的Webserver都是用底层语言编写如C。利用了对应平台的特征,因此用纯Java编写的Tomcat运行速度不可能与它们相提并论。

      一般来说,大的站点都是将Tomcat与Apache的结合,Apache负责接受全部来自client的HTTP请求,然后将Servlets和JSP的请求转发给Tomcat来处理。Tomcat完毕处理后,将响应传回给Apache。最后Apache将响应返回给client。

      并且为了提高性能。能够一台apache连接多台tomcat实现负载平衡。

      关于WEBserver、应用程序server的更具体差别能够參考以下这篇文章:

      通俗的讲,Webserver传送(serves)页面使浏览器能够浏览,然而应用程序server提供的是client应用程序能够调用(call)的方法(methods)。

    确切一点,你能够说:Webserver专门处理HTTP请求(request),可是应用程序server是通过非常多协议来为应用程序提供(serves)商业逻辑 (business logic)。

      以下让我们来细细道来:

      Webserver(Web Server)

      Webserver能够解析(handles)HTTP协议。当Webserver接收到一个HTTP请求(request),会返回一个HTTP响应 (response),比如送回一个HTML页面。为了处理一个请求(request),Webserver能够响应(response)一个静态页面或图片,进行页面跳转(redirect)。或者把动态响应(dynamic response)的产生托付(delegate)给一些其他的程序比如CGI脚本。JSP(JavaServer Pages)脚本,servlets,ASP(Active Server Pages)脚本,server端(server-side)JavaScript。或者一些其他的server端(server-side)技术。

    不管它们(译者注:脚本)的目的怎样,这些server端(server-side)的程序通常产生一个HTML的响应(response)来让浏览器能够浏览。

      要知道。Webserver的代理模型(delegation model)非常easy。当一个请求(request)被送到Webserver里来时,它仅仅单纯的把请求(request)传递给能够非常好的处理请求 (request)的程序(译者注:server端脚本)。Webserver仅仅提供一个能够运行server端(server-side)程序和返回(程序所产生的)响应(response)的环境,而不会超出职能范围。server端(server-side)程序通常具有事务处理(transaction processing),数据库连接(database connectivity)和消息(messaging)等功能。

      尽管Webserver不支持事务处理或数据库连接池。但它能够配置(employ)各种策略(strategies)来实现容错性(fault tolerance)和可扩展性(scalability)。比如负载平衡(load balancing),缓冲(caching)。集群特征(clustering—features)常常被误觉得仅仅是应用程序server专有的特征。

      应用程序server(The Application Server)

      依据我们的定义。作为应用程序server。它通过各种协议。能够包括HTTP。把商业逻辑暴露给(expose)client应用程序。

    Webserver主要是处理向浏览器发送HTML以供浏览,而应用程序server提供訪问商业逻辑的途径以供client应用程序使用。应用程序使用此商业逻辑就象你调用对象的一个方法 (或过程语言中的一个函数)一样。

      应用程序server的client(包括有图形用户界面(GUI)的)可能会运行在一台PC、一个Webserver或者甚至是其他的应用程序server上。在应用程序server与其client之间来回穿梭(traveling)的信息不仅仅局限于简单的显示标记。

    相反,这样的信息就是程序逻辑(program logic)。正是由于这样的逻辑取得了(takes)数据和方法调用(calls)的形式而不是静态HTML,所以client才干够随心所欲的使用这样的被暴露的商业逻辑。

      在大多数情形下,应用程序server是通过组件 (component) 的应用程序接口(API)把商业逻辑暴露(expose)(给client应用程序)的,比如基于J2EE(Java 2 Platform, Enterprise Edition)应用程序server的EJB(Enterprise JavaBean)组件模型。此外,应用程序server能够管理自己的资源。比如看大门的工作(gate-keeping duties)包括安全(security),事务处理(transaction processing)。资源池(resource pooling),和消息(messaging)。就象Webserver一样,应用程序server配置了多种可扩展(scalability)和容错(fault tolerance)技术。

一个样例

  比如。设想一个在线商店(站点)提供实时定价(real-time pricing)和有效性(availability)信息。

这个站点(site)非常可能会提供一个表单(form)让你来选择产品。当你提交查询 (query)后,站点会进行查找(lookup)并把结果内嵌在HTML页面中返回。站点能够有非常多种方式来实现这样的功能。我要介绍一个不使用应用程序server 的情景和一个使用应用程序server的情景。观察一下这两中情景的不同会有助于你了解应用程序server的功能。

情景1:不带应用程序server的Webserver

  在此种情景下,一个Webserver独立提供在线商店的功能。

Webserver获得你的请求(request),然后发送给server端(server- side)能够处理请求(request)的程序。此程序从数据库或文本文件(flat file,译者注:flat file是指没有特殊格式的非二进制的文件。如properties和XML文件等)中查找定价信息。一旦找到,server端(server-side)程序把结果信息表示成(formulate)HTML形式。最后Webserver把会它发送到你的Web浏览器。

简而言之,Webserver仅仅是简单的通过响应(response)HTML页面来处理HTTP请求(request)。

情景2:带应用程序server的Webserver

  情景2和情景1相同的是Webserver还是把响应(response)的产生托付(delegates)给脚本(译者注:server端 (server-side)程序)。然而,你能够把查找定价的商业逻辑(business logic)放到应用程序server上。

由于这样的变化,此脚本仅仅是简单的调用应用程序server的查找服务(lookup service),而不是已经知道怎样查找数据然后表示为(formulate)一个响应(response)。这时当该脚本程序产生HTML响应(response)时就能够使用该服务的返回结果了。

  在此情景中。应用程序server提供(serves)了用于查询产品的定价信息的商业逻辑。(server的)这样的功能(functionality)没有指出有关显示和client怎样使用此信息的细节。相反client和应用程序server仅仅是来回传送数据。当有client调用应用程序server的查找服务(lookup service)时,此服务仅仅是简单的查找并返回结果给client。

  通过从响应产生(response-generating)HTML的代码中分离出来。在应用程序之中该定价(查找)逻辑的可重用性更强了。其他的client。比如收款机。也能够调用相同的服务(service)来作为一个店员给客户结帐。相反,在情景1中的定价查找服务是不可重用的由于信息内嵌在 HTML页中了。

  总而言之,在情景2的模型中,在Webserver通过回应HTML页面来处理HTTP请求(request),而应用程序server则是通过处理定价和有效性(availability)请求(request)来提供应用程序逻辑的。

警告(Caveats)

  如今,XML Web Services已经使应用程序server和Webserver的界线混淆了。

通过传送一个XML有效载荷(payload)给server,Webserver如今能够处理数据和响应(response)的能力与曾经的应用程序server相同多了。

  另外。如今大多数应用程序server也包括了Webserver。这就意味着能够把Webserver当作是应用程序server的一个子集(subset)。

尽管应用程序server包括了Webserver的功能,可是开发人员非常少把应用程序server部署(deploy)成这样的功能(capacity)(译者注:这样的功能是指既有应用程序server的功能又有Webserver的功能)。

相反,假设须要,他们一般会把Webserver独立配置,和应用程序server一前一后。这样的功能的分离有助于提高性能(简单的Web请求(request)就不会影响应用程序server了),分开配置(专门的Webserver。集群(clustering)等等),并且给最佳产品的选取留有余地。

时间: 07-17

WEBserver、应用程序server、HTTPserver差别的相关文章

UNIX网络编程卷1 时间获取程序server TCP 协议相关性

本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie 最初代码: 这是一个简单的时间获取server程序.它和时间获取程序client一道工作. 它是 协议相关,把代码中出现的左边的字符串换为右边的,就变成了IPv6版本号的 IPv4 --> IPv6 sockaddr_in --> sockaddr_in6 AF_INET --> AF_INET6 sin_family --> sin6_family sin_port --&

什么是WEBserver? 经常使用的WEBserver有哪些?

一.什么是WEBserver Webserver能够解析HTTP协议.当Webserver接收到一个HTTP请求,会返回一个HTTP响应,比如送回一个HTML页面.为了处理一个请求Webserver能够响应一个静态页面或图片,进行页面跳转或者把动态响应的产生托付给一些其他的程序比如CGI脚本,JSP脚本,servlets,ASP脚本,server端JavaScript,或者一些其他的server端技术.不管它们(译者注:脚本)的目的怎样,这些server端的程序通常产生一个HTML的响应来让浏览

【收藏】十大Webserver漏洞扫描工具

如今有很多消息令我们感到Web的危急性,因此,当前怎样构建一个安全的Web环境成为网管员和安全管理员们义不容辞的责任.可是巧妇难为无米之炊,该选择哪些安全工具呢? 扫描程序能够在帮助造我们造就安全的Web网站上助一臂之力,也就是说在黑客"黑"你之前,先測试一下自己系统中的漏洞.我们在此推荐十大Web漏洞扫描程序,供您參考. 1. Nikto 这是一个开源的Webserver扫描程序,它能够对Webserver的多种项目(包含3500个潜在的危急文件/CGI,以及超过900个server

[500lines]500行代码学写web server

项目地址:https://github.com/aosabook/500lines/tree/master/web-server.作者是来自Mozilla的Greg Wilson.项目是用py2写成.下面文章中贴出的是已经转换后的能在python3.4下运行的代码,所以可能会与原先的有少许不同. 简单地讲,你在浏览器里输入一个网址,浏览器作为客户端会通过DNS解析域名找到对应的IP,并将这串字符串的一部分作为请求发给这个IP的服务器,服务器解析字符串,解析出你的请求内容做出相应处理,然后把一串字

Java Drp项目实战——Web应用server

引言 Web应用server如今非常多人都在用,但是究竟什么是Web应用server呢,它与Webserver有什么关系,它与应用server又是什么关系,它是他们两种中的当中一种,还是简单的两种server的组合呢? 要搞明确这个问题,我们得先知道什么是Webserver以及什么是应用server,如今我们就来看下这两个server. Webserver Webserver(WebServer)能够解析(handles)HTTP协议.当Webserver接收到一个HTTP请求(request)

Tiny server:小型Web服务器

一.背景 csapp的网络编程粗略的介绍了关于网络编程的一些知识,在最后的一节主要就实现了一个小型的Webserver.这个server名叫Tiny,它是一个小型的可是功能齐全的Webserver.在短短300行左右的代码中,结合了很多思想,比如,进程控制,unix I/O.套接字.HTTP等,令人兴奋的是,它能够为Web浏览器提供静态和动态的内容,也就是说在浏览器中要打开的HTML之类的文件能够直接通过Tiny直接显示在窗体. 我一直想要学习网络编程,这或许就是第一个做成的东西吧,想想都让人兴

[Java聊天室server]实战之二 监听类

前言 学习不论什么一个稍有难度的技术,要对其有充分理性的分析,之后果断做出决定---->也就是人们常说的"多谋善断":本系列尽管涉及的是socket相关的知识,但学习之前,更想和广大程序猿分享的是一种心境:学习是一个循序渐进的过程,心态应该随时调节,保持戒骄戒躁的状态.比方近期在看网易公开课MIT<算法导论>,老师提到,学习算法之前要计算机数学+离散数学+概率论等课程的知识,所以一直学不好算法的程序猿最好还是从基础入手,这都是中国式教育惹的祸啊!(此处省略一万字...

tornado httpserver

这是一个非阻塞的,单线程的httpserver.这个类一般是不会被应用程序直接调用的,它一般是被上层的tornado.web.Application.listen方法调用,因为这个listen方法是这样定义的 def listen(self, port, address="", **kwargs): """Starts an HTTP server for this application on the given port. This is a conv

ubuntu server编译安装nginx

刚刚安装好了ubuntu server14.04,如今要安装一个webserver,纯静态就用nginx应用程序server吧,性能出众啊. 安装编译环境 我们这里採用源代码编译安装的方式,大家能够看到非常多东西. 保证已经安装了openSSH,然后用putty连接到ubuntu,然后首先安装编译环境,由于是新安装的系统,必须做这步,除非已经安装过了. sudo apt-get install build-essential sudo apt-get install gcc 有人说 sudo a