一文看懂web服务器、应用服务器、web容器、反向代理服务器区别与联系

HTTP协议基本概念简介 文章目录HTTP协议简介1 Web服务器2 HTTP协议HTTP协议的特点:3 HTTPS协议4 地址(URL) HTTP协议简介 1 Web服务器 WWW是 World Wide Web (环球信息网)的缩写,也可以简称为 Web,中文名字为“万维网”。 Web服务器(也称WWW服务器)一般指网站服务器,主要功能是提供网上信息浏览服务。 目前最主流的三个Web服务器是Apache、Nginx、IIS。 一些使用C/C++开发的开源的http服务器列表在这里:http://www.oschina.net/p 阅读详情

我们知道,不同肤色的人外貌差别很大,而双胞胎的辨识很难。有意思的是Web服务器/Web容器/Web应用程序服务器/反向代理有点像四胞胎,在网络上经常一起出现。本文将带读者对这四个相似概念如何区分。

1.1. Web服务器概念与基本原理

1.1.1. Web服务器的历史

1989年,互联网之父Berners-Lee向其雇主CERN提出了一个新项目,目的是通过使用超文本系统来缓解科学家之间的信息交流。该项目导致Berners-Lee在1990年编写了两个方案:

  • 一个名为WorldWideWeb的浏览器。
  • 世界上第一个网络服务器,后来被称为CERN httpd,它运行在NeXTSTEP上
    在1991年至1994年期间,用于通过万维网冲浪和交换数据的早期技术的简单性和有效性有助于将其移植到许多不同的操作系统,并将其用于科学组织和大学,然后传播到行业。

1994年,Berners-Lee决定组建万维网联盟(W3C),通过标准化过程来管理涉及的许多技术(HTTP,HTML等)的进一步发展。

就是这台服务器:

2017-08-26-15-38-13

Web服务器的主要功能是存储,处理和传递网页给客户。客户端和服务器之间的通信使用超文本传输​​协议(HTTP)进行。交付的页面最常见的是HTML文档,除了文本内容之外,还可能包含图像,样式表和脚本。

一个用户代理,通常是web浏览器或web爬虫,通过发起一个HTTP请求以获取服务器资源,服务器根据请求返回该资源或由于某种原因响应错误消息。该资源通常是服务器辅助存储上的真实文件,但这不一定是这种情况,取决于Web服务器的实现方式。

2017-08-26-16-22-42

虽然主要功能是提供内容,但HTTP的完整实现还包括从客户端接收内容的方式。此功能用于提交Web表单,包括上传文件。许多通用Web服务器还支持使用Active Server Pages(ASP),PHP或其他脚本语言的服务器端脚本。这意味着Web服务器的行为可以在单独的文件中脚本化,而实际的服务器软件保持不变。通常,此函数用于动态生成HTML文档(“即时”),而不是返回静态文档。前者主要用于从数据库检索或修改信息。后者通常快得多,并且更容易被缓存,但不能提供动态内容。

Web服务器不仅用于为万维网服务。它们也可以被嵌入到诸如打印机,路由器,网络摄像机等设备中,并且仅服务于本地网络。然后,web服务器可以用作用于监视或管理所讨论的设备的系统的一部分。这通常意味着客户端计算机上不需要安装其他软件,因为只需要一个网络浏览器(现在大多数操作系统都包含在内)。

1.1.2. Web服务器工作原理

HTTP协议基于TCP协议上,是一个应用层协议,用于用户代理和Web服务器进行通信。Web服务器通常采用一问一答的方式进行工作:

  1. 在用户代理上用户发起资源请求,请求内容包括但不限于:指定资源的唯一标识URI,指明动作类型(GET/POST/DELETE/PUT...)
  2. 用户代理解析用户输入URI并从中获取目标域名,交由DNS服务器解析。如果URI中指定某IP地址,这无需这步。
  3. 如果与服务器的会话还没建立,此时先建立TCP连接,并完成HTTP协商(确定双方均可接受的处理方式,包括协议版本,是否加密,内容格式等等)。
  4. 用户代理把请求内容封装成HTTP数据包向服务器发送。
  5. 服务器接收到资源请求并以之前协商好的方式解包并处理。
  6. 服务器请求的资源封装成HTTP数据包并返回给用户代理。

接下来重点说说服务器端的工作原理

2017-08-26-18-22-11

  • TCP监听模块

    服务器监听某个端口(一般默认是8080端口,用户可以设置其他端口),以建立和用户代理之间的连接。一旦建立连接,用户代理的后续HTTP请求将不用再进入监听模块。
  • 预处理

    此处主要做三件事:1. 从TCP报文中获取HTTP请求报文。 2. 根据和用户代理的协商进行解密,解压,安全处理等等。3. 根据服务器自身的配置进行安全处理,建立会话状态等等。
  • UR路由

    解析URL字符串和动作以确定用户代理请求的资源,根据匹配规则(通常根据正则表达式+后缀)路由到静态资源处理模块或动态资源处理模块。
  • 静态资源处理模块

    负责找到静态资源,比如HTML/Javascript/CSS文件/图片/图像,确定内容是字符流或者字节流,并确定对应MIME,比如HTML生成MIME为text/html的字符流,mpeg视频文件生成MIME为video/mpeg的字节流。

  • 动态资源处理模块

    运行业务逻辑处理,动态决定返回的资源内容和类型,内容和类型的处理原则同上。

  • 后处理

    根据和用户协商的协议进行加密,压缩,安全处理等等。

  • 资源输出模块

    把处理好的内容和类型封装成HTTP报文,往TCP连接另一头的用户代理发送TCP报文(内容是HTTP报文)。

主流Web服务器

包括Apache、IIS 、Nginx,市场占有率如下

2017-08-26-18-58-24

还有比较多使用Tomcat,Jetty,WebSphere,WebLogic,Kerstrel等等。

1.2. Web应用程序容器概念与基本原理

1.2.1. Web应用程序容器的由来

Web服务器的出现的标志着WWW时代的带来,世界变得更加平面化。当初尝到甜头的开创者们开始不满足与在互联网上获取静态资源,于是出现了CGI脚本来动态获取资源。再后来网络发展方向也是朝着增强Web服务器动态获取资源的能力前进。以下是代表性的动态技术:

技术名词特点 
CGI(Common Gateway Interface,公用网关接口)以独立进程运行,可以用多种语言开发,比如C,C++,VB,Perl,灵活但效率低,维护复杂 
PHP服务器端嵌入HTML脚本,开源,功能强大,扩展性较差 
JSP服务器端嵌入HTML脚本,跨平台,部署前需编译,主要缺点是编写JSP比较复杂,需熟悉JAVA及相关技术 
ASP服务器端嵌入HTML脚本,开发简单,功能强大,只能在windows下运行 

随后Web服务器朝着企业级应用方向发展,快速的业务变化,迫使Web开发人员面对新的挑战:如何快速写出鲁棒,可靠,符合业务需求的程序并顺利部署?解决这个挑战的一个有效的办法是,创造一个Web程序开发框架(含运行环境,比如解释执行JSP,Web API),这个框架解决鲁棒性,可靠性问题,提供快速开发接口。换言之,开发人员只需要专注于实现业务本身,如有更高的需求还可以对框架进行定制和扩展。这个框架的另外一个名字是Web应用程序容器。

1.2.2. Web应用程序容器的基本工作原理

一般情况下Web应用程序容器是以下构成体系:

2017-08-26-22-39-04

注:浅蓝色的模块是实现业务程序的主要使用模块。

相对于Web服务器,该容器新增或强化了以下模块:

  • 分配线程池资源

    容器为每个请求分配一个线程进行处理,通常采取线程池的方式高效理由CPU算资源。

  • 封装Request上下文

    一个请求对应一个Request上下文,它主要封装了用户请求的主要构成:URL,HTTP请求头,以及基于请求头构建的Session,Cookie等对象,方便编程使用。

  • 封装Response上下文

    一个请求对应一个Response上下文,主要用于向用户代理返回资源。可以在其中写入输出流,或者重定向,或者返回错误码等等。

  • URL路由

    在容器里,运行开发人员设置不同的路由匹配规则,比如让.HTM返回.HTML,也可以自定义.xyz返回.HTML资源。更加灵活的配置可以参考JAVA MVC或者ASP.NET MVC的配置方案。

  • 动态资源处理模块

    通常在这里具体的容器和开发语言都有自己的高效开发模型,比如JAVA的Servlet,ASP.NET的Web Form,MVC。

  • 回收资源

    这里会回收刚才的线程资源,为了线程复用,除非服务器空闲一般会将线程返回线程池。

    可以看出,Web容器本身具备了做为一个Web服务器的功能,事实上通常实现Web容器功能的服务器就是一个Web服务器.比如Tomcat , IIS ,Jetty。

主流Web容器

包括Tomcat , IIS ,Jetty 。

还有比较多使用WebSphere,WebLogic等等。

1.3. Web应用程序服务器概念及基本原理

在Web服务器发展的同一个时期,应用服务器已经存在并发展很长一段时间了。一些公司为Unix开发了Tuxedo(面向事务的中间件)、TopEnd、Encina等产品,这些产品都是从类似IMS和CICS的主机应用管理和监控环境衍生而来的。大部分的这些产品都指定了“封闭的”产品专用通信协议来互连胖客户机(“fat” client)和服务器。在90年代,这些传统的应用服务器产品开始嵌入HTTP通信功能,刚开始要利用网关来实现。不久后它们之间的界线开始变得模糊了。

同时,web服务器越来越成熟,可以处理更高的负载、更多的并发和拥有更好的特性;应用服务器开始添加越来越多的基于HTTP的通信功能。所有的这些导致了web服务器与应用服务器的界线变得更窄了。

目前,“应用服务器”和“web服务器”之间的界线已经变得模糊不清了。但是人们还把这两个术语区分开来,作为强调使用。

当有人说到“web服务器”时,你通常要把它认为是以HTTP为核心、web UI为向导的应用。当有人说到“应用服务器”时,你可能想到“高负载、企业级特性、事务和队列、多通道通信(HTTP和更多的协议)”。但现在提供这些需求的基本上都是同一个产品。

下图描述一个典型的Web应用服务器的结构图:

2017-08-27-12-03-41

从上图中可以看到Web应用服务器包括了Web容器,同时内置了支撑企业应用的事务,安全,集成,通信,高可用等等功能,极大了减少了重复开发量,保障了业务系统快速开发和部署,而它本身也是一个Web服务器。Web应用服务器可以选择使用大厂的WebLogic和WebSphere这种重量级产品外,也可以使用类似与Tomcat、jetty这样的web containner 再加上第三方的框架(spring,hibernate等)来构建自己的Application Server;.NET Core平台下可以选择IIS, Apache,Nginx 与ASP.NET Core构建。

1.4. 反向代理概念与基本原理

1.4.1. 反向代理基本概念

反向代理是代理服务器的一种。它根据客户端的请求,从后端的服务器(如Web服务器)上获取资源,然后再将这些资源返回给客户端。与前向代理不同,前向代理作为一个媒介将互联网上获取的资源返回给相关联的客户端,而反向代理是在服务器端(如Web服务器)作为代理使用,而不是客户端。客户端通过前向代理可以访问很多不同的资源,而反向代理是很多客户端都通过它访问不同后端服务器上的资源,而不需要知道这些后端服务器的存在,而以为所有资源都来自于这个反向代理服务器。

2017-08-27-17-00-51

互联网中的请求发送给反向代理,反向代理把请求转发到内网中的服务器。

反向代理的主要作用为:

  • 加密和SSL加速
  • 负载均衡
  • 缓存静态内容
  • 压缩
  • 减速上传
  • 安全防火墙
  • 外网发布
  • 突破互联网封锁
  • 解决跨域问题

1.4.2. 反向代理基本工作原理

一个反向代理服务器的构成和处理过程如下图:

2017-08-30-23-29-39

左边淡黄色功能模块对外网报文进行处理,右边灰色功能模块针对内网报文进行处理

  • TCP监听模块

    监听TCP请求,这里的请求是指报文内容是某应用层协议(比如HTTP,FTP,EMAIL等应用层协议)的请求。至于这里是否会单独产生一个线程来开始处理,这个由服务器自己决定,目前最流行的是先入消息队列然后异步处理,这样能极大提高代理的吞吐量和稳定性。

  • 匹配被代理服务器

    代理服务器根据一个表(存放外网url和内网服务器的对应关系,通常需人工进行设置),如果匹配到则继续处理,否则依据外网协议返回错误信息,比如HTTP协议这返回404。

  • 应用负载均衡策略

    如果比较大型的互联网应用,为了整体系统稳定性,解决单点问题,需要根据自定义策略合理的转发报文给被代理服务器。简单的策略是哈希分发或者随机分发,一般可以由用户进行配置和选择。

  • 预处理

    这里依据协商好的外网应用协议进行解密,安全,会话,解压等处理。

  • 新生成网络报文

    这里依据协商好的内网应用协议生成网络报文,这里可能会进行加密,安全,会话,压缩等处理。

  • 转发给被代理服务器

    把新生成的网络报文发送给内网服务器(可能是否Web服务器,Ftp服务器,邮件服务器)。

  • 接受网络报文

    接受内网服务器反馈的网络报文。

  • 预处理

    这里依据协商好的外网应用协议进行加密,安全,会话,压缩等处理。

  • 资源输出模块

    这时生成满足外网应用协议要求的报文,并发送到外网连接的另一端(用户代理)。

常用的反向代理服务器

它们的名字您一定记得:Ngnix,IIS,Apache。

1.5. 总结

从概念上讲:Web服务器是提供WWW服务的程序;Web容器是提供给开发者的框架;Web应用程序服务器内容丰富得多,既可用各厂商通常遵循一定的工业标准并自定义扩展功能而成,也可以利用开源组件轻量级拼装打造;反向代理服务器在企业级应用中表现突出,具有解决集中式安全,负载均衡等等优点。如今这四个概念的边界越来模糊,看看这个表就知道了:

软件名词是否Web服务器是否Web容器是否Web应用服务器是否能反向代理
IIS是是 是
Nginx是  是
Apache是  是
Tomcat是是  
Jetty是是  
WebSphere是是是 
WebLogic是是是 
Kerstrel是是?  
Http.sys是  是

关于Kerstrel是否web容器,有两种观点:

1. 由于Kerstrel不提供编写应用的框架,所以它不是容器;asp.net core才是容器,因为它提供了开发应用的框架并提供web应用(MVC,Web API)运行环境。

2. Kerstrel提供了运行环境。

非常欢迎大家提出自己的有力观点,帮助我们清晰化这个asp.net core容器概念。

资料引用

【1】https://en.wikipedia.org/wiki/Web_server
【2】http://www.cnblogs.com/vipyoumay/p/5853694.html
【3】https://zh.wikipedia.org/wiki/%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86

作者:帅虫哥 出处: http://www.cnblogs.com/vipyoumay/p/7455431.html

以上内容有任何错误或不准确的地方请大家指正,不喜勿喷! 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如果觉得还有帮助的话,可以点一下右下角的【推荐】,希望能够持续的为大家带来好的技术文章!想跟我一起进步么?那就【关注】我吧。

LiteOS | 基于LiteOS的智慧农业案例实验分享 分享一个基于小熊派+LiteOS+华为云的案例实验(智慧农业)。 实验框图 相关模块简介 1、STM32L431RCT6 2、LiteOS LiteOS是华为开发的轻量级实时操作系统: LiteOS源码GitHub仓库链接: https://github.com/LiteOS/LiteOS 其源码一级目录结构如下: 其内核包括任务管理、内存管理、时间管理、通信机制、中断管理、队列管... 阅读详情

相关推荐

Web服务器介绍

web浏览器简介

weixin_44295677的博客 1万+

告别FreeRTOS?手把手带你用NuttX在STM32F4-Discovery上跑起第一个Shell

本文详细介绍了如何在STM32F4-Discovery开发板上从FreeRTOS迁移到NuttX,并运行第一个Shell。NuttX以其完整的POSIX兼容性和模块化架构优势,特别适合复杂网络应用的开发。通过环境搭建、移植配置、调试技巧及POSIX开发实践,帮助开发者高效构建嵌入式系统。

weixin_42526417的博客 299

华纳云:web服务器和www服务器有什么区别?

在互联网的早期,为了方便用户记忆和访问网站,人们将网站的地址设计成了类似于“www.example.com”的形式。当我们在浏览器中输入一个网址时,这个请求会被发送到相应的web服务器,然后服务器会将请求的文件发送回我们的设备,最终呈现在我们眼前的就是一个完整的网页。每天,我们都会通过各种设备访问无数的网页和网站,而这些网页和网站的背后,就是web服务器和www服务器。今天,就让我们一起来探讨一下这个话题。而www服务器则是一种特殊的web服务器,它主要负责托管网站,并处理以“www”开头的网址请求。

YOKEhn的博客 2770

quartus 13.1常见报错解决方法

在使用quartus中会遇到很多由于安装或设置不规范造成的错误。我就目前我遇到的一些错误以及我的解决方法分享给大家,这个文章将会持续更新,如果读者有遇到软件中错误无法解决的问题,也欢迎在评论区留言。 一、编译出现lience错误 在对设计的电路编译时,系统在程序运行3秒内即结束并报错,大概意思为现有的证书不支持编译。这个常见问题源自破解不成功,这里读者很有可能犯的错误是在使用破解器的时候没有区分x86(即32-bit)和x64软件破解器对应的文件夹。 如图所示有两种破解器,分别对应32位和64位的软件,大部

肥宅的博客 3万+

【PyTorch版本兼容性指南】如何在不同版本中正确使用torch.nn.attention

本文详细解析了PyTorch版本兼容性问题,特别是torch.nn.attention模块在不同版本中的使用差异。针对常见的ModuleNotFoundError错误,提供了三种实用解决方案:升级PyTorch版本、使用自定义实现和源码移植方案,并分享了最佳实践建议,帮助开发者有效避免兼容性问题。

weixin_29084231的博客 472

常用的WEB服务器简介

常用的WEB服务器    WEB服务器也称为WWW服务器、HTTP服务器,其主要功能是提供网上信息浏览服务。Unix和Linux平台下常用的服务器有Apache、Nginx、Lighttpd、Tomcat、IBM WebSphere等,其中应用最广泛的是Apache。而Window NT/2000/2003平台下最常用的服务器是微软公司的IIS。    1、Apache是世界上应用最多的WEB服务...

Apeopl的博客 5万+

在 LangGraph 中集成 Skills 增强智能体能力

LangGraph 的核心是通过**状态机 + 节点(Node) + 工具(Tool)**来编排智能体流程,你可以把 Skills 理解为“封装好的工具或可复用的任务流”,下面是一套可落地的集成方案。

lpfasd123的博客 1179

什么是web服务器?有哪些作用?

Web服务器一般指网站服务器,是驻留于因特网上某种类型计算机的程序,可以向请求终端提供服务,主要功能时存储、处理和传递网页给“客户”,传递内容一般是HTML文档、图像、样式表或脚本等,也可以放置网站文件以供浏览或下载。Web服务器也称为WWW(Word Wide Web)服务器,核心功能就是提供网页信息浏览服务,严格来说Web服务器只负责处理Http协议请求,发送静态页面的内容。Web服务器中的日志文件易于配置,它们可以配置为用户喜欢的顺序,配置Web文件为分析操作系统中的操作和Web流量铺平了道路。

瓦罗兰特顶级C位的博客 2455

上位机图像处理和嵌入式模块部署(qmacvisual获取边界点)

【声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 在图像处理中,解决了分割的问题之后,下面就是属性信息的提取。在这其中,有一种属性是非常重要的 ,那就是外界轮廓的边界点获取。这个边界点,可以用来计算长度,也可以用来进行直线、圆的拟合,具体的用途取决于现场的实际使用场景。目前qmacvisual支持对边界点的提取,相关控件可以直接用来提取边界点。

嵌入式-老费,一个分享专业嵌入式知识的blog 883

节省人力成本40%!仓储物流AI机器人调度系统实战案例(含路径规划算法与系统架构图)

首先,我们需要定义一个Node类self.x = x # 节点x坐标self.y = y # 节点y坐标self.g = g # 从起点到当前节点的实际成本(g值)self.h = h # 从当前节点到终点的启发式成本(h值)self.f = g + h # 总成本(f值)self.parent = None # 父节点(用于回溯路径)self.task_id = task_id # 任务IDself.priority = priority # 任务优先级(1=最高,5=最低)

小程序开发 950

一文看懂 Web服务器、应用服务器、Web容器、反向代理服务器区别与联系

点击上方“杰哥的IT之旅”,选择“置顶公众号”干货、福利第一时间送达!导读:我们知道,不同肤色的人外貌差别很大,而双胞胎的辨识很难。有意思的是Web服务器/Web容器/W...

JackTian 529

如何做好软件需求分析?

软件需求分析也称为系统需求分析或需求分析工程等,是开发人员经过深入细致的调研和分析,准确理解用户和项目的功能、性能、可靠性等具体要求,将用户非形式的需求表述转化为完整的需求定义,从而确定系统必须做什么的过程。软件开发一般包括:可行性分析、需求分析、软件设计、软件开发、软件测试、软件实施、软件服务等步骤,需求分时软件开发的第一步骤。用户需求分析是指在系统设计之前和设计、开发过程中对用户需求所作的调查与分析,是系统设计、系统完善和系统维护的依据。

qq_41854911的博客 1415
上一篇: 解决 Failed to execute goal plugins:maven-clean-plugin:2.5:clean (default-clean) on project报错
下一篇: SSM框架之@ResponseBody和@RequestBody的区别及HttpMessageConverter的作用
L聪聪聪
博客等级 码龄10年 272粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值