社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
随着时代的发展与进步,虽然Web服务器、应用服务器、代理服务器等的界限越来越模糊,但作为软件程序员的我们,想要有更广阔的视野,还需要有更系统的知识,用以支撑我们最初的“梦想”。
举个例子:想要看懂开源中国中的部分项目分类,我们就需要了解HTTP服务器、Web容器、应用服务器、代理服务器等的概念和基本原理。
本文着重介绍,Web服务器、Web容器、应用服务器、反向代理服务器等的基本概念及基本原理。
https://my.oschina.net/llzhang/blog
先简单了解几个概念
- HTTP: 是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个http请求到服务器上指定端口,我们称这个客户端为用户代理程序
。
- 用户代理(User Agent): 是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。例如:
Firefox 4.0.1 – Windows
User-Agent:Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
HTTP协议基于TCP协议上,是一个应用层协议,用于用户代理程序和Web服务器进行通信,Web服务器通常采用一问一答的方式进行工作。下面简单简单介绍其工作原理。
TCP监听模块: 服务器监听某个端口,以建立和用户代理之间的连接,一旦建立连接,用户代理的后续HTTP请求将不再进入监听模块。
预处理: 从TCP报文中获取HTTP请求报文,根据和用户代理的协商进行解密,解压,安全处理等,再根据服务器自身的配置进行安全处理,建立会话状态等。
URL路由: 解析URL字符串和动作,以确定所请求的资源,根据匹配规则路由到静态或动态资源处理模块。
静态资源处理模块: 负责找到静态资源,比如HTML/JavaScript/CSS文件、图片或视频,确定内容是字符流或字节流,并确定对应MIME,比如:
HTML生成MIME为text/html的字符流,mpeg视频文件生成MIME为video/mpeg的字节流。
动态资源处理模块: 运行业务逻辑处理,动态决定返回的资源内容和类型,处理原则同上。
后处理: 根据用户协商的协议进行加密,压缩,安全处理等。
资源输出模块: 把处理好的内容和类型封装成HTTP报文,往TCP连接另一头的用户代理发送。
随着各企业应用业务快速的发展,迫使Web开发人员面对新的挑战:如何快速写出鲁棒(健壮),可靠,符合业务需求的程序并部署。
一个解决办法是:创造一个Web程序开发框架(含运行环境,比如解释执行JSP等),这个框架解决鲁棒性,可靠性问题,提供快速开发接口。开发人员只需要专注于实现业务本身,这个框架的另外一个名字是Web容器。下面简单介绍其工作原理。
上图黄色模块URL路由及动态资源处理模块,是实现业务程序的主要使用模块。相比于Web服务器,新增或强化了以下模块:
- 分配线程池资源: 容器为每个请求分配一个线程进行处理,通常采取线程池的方式,是为高效利用CPU资源。
- 封装Request上下文: 一个请求对应一个Request上下文,它主要封装了用户请求的主要构成:URL,HTTP请求头,以及基于请求头构建的Session,Cookie等对象,方便编程使用。
- 封装Response上下文: 一个请求对应一个Response上下文,主要用于向用户代理程序返回资源,可以在其中写入输出流,或者重定向,或者返回错误码等等。
- URL路由: 在容器里,运行开发人员可以设置不同的路由匹配规则。
- 动态资源处理模块: 通常具体的容器和开发语言都有自己的高效开发模型。
- 回收资源: 回收线程资源,为了线程复用,除非服务器空闲,否则一般会将线程返回线程池。
Web容器(开发框架)本身具备了作为一个Web服务器的功能,事实上通常实现Web容器功能的服务器就是一个Web服务器。
应用服务器早于Web服务器就出现并发展,其大部分产品都指定了“封闭的”产品专用通信协议,随着HTTP的发展,应用服务器开始添加越来越多的基于HTTP的通信功能,现在Web服务器和应用服务器的界限越来越模糊。以下为应用服务器的结构图,仅供参考。
代理服务器的两种重要功能:实现科学上网和负载均衡。一般可以分为正向代理与反向代理。
作用:
用户使用: 客户端必须设置正向代理服务器,前提是要知道正向代理服务器的IP地址和代理程序端口。
概念: 它根据客户端的请求,从后端的服务器上获取资源,然后再将这些资源返回给客户端。反向代理一般是从服务端出发,根据客户端发向反向代理的请求,反向代理服务器收到后判断请求走向何处,获取结果后再反馈给客户端。
作用:
基本工作原理: 黄色模块是对外网报文的处理,灰色模块是对内网报文的处理
概念: 客户端不需要知道有代理服务器的存在,它改编你的报文,并会传送真实IP,加密的透明代理属于匿名代理,意思是不用设置使用代理。
作用: 比如:行为管理软件:用户并不知道行为管理设备充当透明代理,当用户向目标服务器提交请求时,透明代理设备根据自身策略拦截并修改用户的报文,并作为实际的请求方向目标服务器发送请求,当接到信息回传,透明代理再根据自身的设置把允许的报文发回给用户。
概念: 代理服务器是一种代理网络用户去取得网络信息的,是一种网络信息中转站,而VPN(Virtual Private Network)即虚拟专用网络:是一种常用于连接中、大型企业或团体与团体间的私人网络的通讯方法。也就是说,VPN是一种虚拟出来的企业内部专线,通过在公用网络上建立专线网络,来进行加密通讯。VPN是代理服务器的一种形式。
作用: 对比:代理服务器是处理内部网络访问外部网络的问题,而VPN大多是解决外部网络访问内部网络的问题。
实际应用过程中,由于具体应用的原因,这些概念之间的边界越来越模糊。如下图,仅供参考:
本文部分参考链接,借此感谢先行的前辈们
http://www.cnblogs.com/vipyoumay/p/7455431.html
http://digi.163.com/17/0407/06/CHD8VM0U001680N8.html
http://z00w00.blog.51cto.com/515114/1031287
如有不妥之处,欢迎批评指正,感谢CSDN做出的贡献,本人C链接如下:
http://blog.csdn.net/oboluochuixue12
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!