WEB服务动静结合
基本介绍
1)WEB服务仅能处理静态请求,如果处理动态请求则需要对应的动态资源服务软件,即:应用程序服务软件
2)常见的应用服务软件有:PHP、Java、Python等
3)问题:WEB服务如何与外部应用程序通信?通常有以下几种方案:
- CGI协议:基本没人使用,不安全以及性能极其低下
- 模块方式:如:Apache内置PHP模块,用以处理PHP动态请求
- FastCGI协议:如:NGINX的php-fpm
4)CGI、内置模块、FastCGI这三种方式,性能最好的要属FastCGI,但是需要额外的进程
5)注意:静态资源和动态资源都是以数据流(本质都是数据流)形式返回用户的:
- 静态资源:WEB服务将页面文件以【数据流】形式封装到响应报文,然后返回用户
- 动态资源:WEB服务将执行结果(注意:此时是结果非文件)以【数据流】形式封装到响应报文,然后返回用户
CGI协议介绍
1)CGI(Common Gateway Interface):通用网关接口,早期WEB服务与外部应用程序(CGI程序)通信的协议/接口标准,几乎可以在任何操作系统上实现(跨平台性好)
2)CGI协议允许WEB服务执行外部程序,并将外部应用程序执行的结果返回WEB服务,并最终返回用户
3)工作原理:用户请求WEB资源,静态请求交由WEB服务自行处理;如果是动态请求,WEB服务会【fork()】一个子进程(CGI进程/应用程序服务进程),然后将动态请求交由子进程处理,处理完后的数据返回WEB服务,最终由WEB服务封装为HTTP响应报文返回用户,然后结束这个子进程
4)每一次的动态请求都会【fork()】一个子进程,周而复始的进行。所以,通过CGI协议处理动态请求,有多少连接请求就会创建多少CGI子进程,子进程反复加载是CGI方式性能低下的主要原因,当用户请求数量非常多时,会大量挤占系统的资源如内存、CPU时间等,造成效能低下
WEB内置模块介绍
1)后来出现了一种更高级的方式,即:WEB服务可以内置Perl解释器或PHP解释器,也就是将这些解释器做成模块的方式,WEB服务会在启动时就会加载这些模块
2)工作原理:用户请求WEB资源,静态请求交由WEB服务处理;如果是动态请求,WEB服务会通过内置模块来进行响应、解析、处理,省得重新fork一个进程,效率提高了。动静请求都是由WEB服务自身处理的
FastCGI协议介绍
1)WEB服务、应用程序均为守护进程,二者基于FastCGI协议通过套接字通信
2)FastCGI协议采用的是C/S架构,分为客户端(WEB服务)和服务端(应用程序服务)
3)大多数WEB服务都支持FastCGI协议,包括Apache、Nginx、LigHTTPd等。同时,FastCGI协议也被许多应用程序服务所支持,如:当前比较流行的动态语言PHP
3)工作原理:用户请求WEB资源,静态请求交由WEB服务处理;如果是动态请求,WEB服务会通过【FastCGI协议】将请求发给应用程序服务进行处理,应用程序会将处理完的结果返回WEB服务,最终由WEB服务封装为HTTP响应报文返回用户。此时,WEB服务和应用程序服务均为守护进程(可以启动多个FastCGI的守护进程)
4)与CGI协议的区别:

相关链接
1)https://www.zhihu.com/question/30672017
2)https://blog.csdn.net/linuxheik/article/details/51865292
3)https://www.awaimai.com/371.html
4)https://www.biaodianfu.com/cgi-fastcgi-wsgi.html
5)http://www.ttlsa.com/web/fastcgi-cgi-diff/
WEB服务动静结合的更多相关文章
- HAProxy+apache实现web服务动静分离
HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案. HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支 ...
- CentOS 6.5环境下使用HAProxy+apache实现web服务的动静分离
HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持 ...
- 上传文件服务与web服务分离
业务场景:1. 后端服务为java web应用,使用tomcat容器,多实例集群化部署.2. 前端使用nginx作为后端应用的反向代理. 业务需求:现在需要在java web应用端上传文件,同时还要能 ...
- 关于如何提高Web服务端并发效率的异步编程技术
最近我研究技术的一个重点是java的多线程开发,在我早期学习java的时候,很多书上把java的多线程开发标榜为简单易用,这个简单易用是以C语言作为参照的,不过我也没有使用过C语言开发过多线程,我只知 ...
- 基于IIS构建Pyathon Web服务
本文简单叙述了在Windows下,如何利用IIS构建Python Web服务. 其主要步骤如下: 1.在IIS下构建一个站点,如图: 2.配置Python文件的处理程序,如图: 3.最后,在对应站点根 ...
- Web服务
Web服务的相关信息 Apache服务器是web服务的重要应用 在这也是讲的apache 这里需要安装一个http服务软件才行! Apache的根文档在/var/www/html 主配置文件 /e ...
- Python flask 基于 Flask 提供 RESTful Web 服务
转载自 http://python.jobbole.com/87118/ 什么是 REST REST 全称是 Representational State Transfer,翻译成中文是『表现层状态转 ...
- 使用 ServiceStack 构建跨平台 Web 服务
本文主要来自MSDN杂志<Building Cross-Platform Web Services with ServiceStack>,Windows Communication Fou ...
- webServices与Web服务
本篇的内容在MSND中标注已是一项旧技术,而取而代之的是WCF, 那么我也放弃吧!但是这个属于Web服务的范畴,而WCF本质上也是一个Web服务来的,所以对于基础的东西还是不变的.那么这次就着重看看这 ...
随机推荐
- 利用域凭据:解密GPP中的管理员密码
在利用域凭据过程中,除了通过Mimikatz和WCE从内存读取明文密码外,还可以通过域共享文件夹SYSVOL组策略文件获取哈希码. 组策略首选项(Group Policy Preference, GP ...
- DB数据库的基本操作
启动 MongoDB 服务 sudo service mongodb start 进入 MongoDB 命令行操作界面,在命令行中敲 exit 可以退出.mongo 创建数据库 use db 命令查看 ...
- #20175201张驰 实验三 敏捷开发与XP实践
实验步骤 (一)敏捷开发与XP 一.敏捷开发与XP实践-1 ①实验要求: 敏捷开发与XP实践 http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse ...
- ORACLE DG 库参数db_file_name_convert和log_file_name_convert的作用
https://www.cnblogs.com/xqzt/p/5089826.html ORACLE DG 库参数db_file_name_convert和log_file_name_convert的 ...
- 将String转化成Stream,将Stream转换成String, C# Stream 和 byte[] 之间的转换(文件流的应用)
static void Main( string[] args ) { string str = "Testing 1-2-3"; //convert string 2 strea ...
- python文件操作错误解决
1. python读取文件时提示"UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 205: illega ...
- springMVC解决跨域
原文:https://www.cnblogs.com/shihaiming/p/9544060.html 介绍: 跨站 HTTP 请求(Cross-site HTTP request)是指发起请求 ...
- spring的后置处理器——BeanPostProcessor以及spring的生命周期
后置处理器的调用时机 BeanPostProcessor是spring提供的接口,它有两个方法——postProcessBeforeInitialization.postProcessAfterIni ...
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_05 IO字符流_5_flush方法和close方法的区别
flush之后,还可以继续使用流写文件
- 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_01 Collection集合_2_集合框架介绍