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服务来的,所以对于基础的东西还是不变的.那么这次就着重看看这 ...
随机推荐
- 6.25考试整理:江城唱晚&&不老梦&&棠梨煎雪——题解
按照旧例,先安利一下主要作者:一扶苏一 以及扶苏一直挂念的——银临姐姐:银临_百度百科 (滑稽) 好哒,现在步入正题: 先看第一题: 题解: 在NOIP范围内,看到“求方案数”,就说明这个题是一个计数 ...
- CG-CTF | 综合题
开场就是一个js混淆,直接丢到console里面 然后根据tip查头: 看到这个tip,一开始还以为要考注入了,用访问历史来进行注入,后来发现是我高估这题了,,,:
- oracle触发器update本表数据
功能: 1. 允许/限制对表的修改 2. 自动生成派生列,比如自增字段 3. 强制数据一致性 4. 提供审计和日志记录 5. 防止无效的事务处理 6. 启用复杂的业务逻辑 开始 create trig ...
- 006-unity3d GUI初识、贴图、自定义鼠标指针
一.gui概念 无论摄像机拍摄到的图像怎么变换,GUI永远显示在屏幕上,不受变形.碰撞.光照的影响.对话框.战斗值.能量等.示例:用手机录像,摄像的参数不会随着拍摄场景变换.GUI基础GUI部分是每帧 ...
- Android studio 不能创建Activity等文件
这是我之前安装Android studio的一系列问题:http://tieba.baidu.com/p/5921373177 1. 不能创建Activity等许多文件: 2. 工程运行不了: 3. ...
- 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第6节 static静态_12_静态static关键字修饰成员变量
创建一个学生类 定义成员变量,无参构造,全参构造.成员变量的getter和setter 所在教室必须是一样的,定义所在教室 下面来创建两个学生 只给one的room赋值了.two的教室并没有赋值.都输 ...
- Jmeter之ForEach控制器(配合正则表达式使用)
在使用正则表达式提取响应信息时,存在部分信息有多个值,为了能使用所有的值,可以结合ForEach控制器使用. 一.界面显示 二.配置说明 1.名称:标识 2.注释:备注 3.输入变量前缀:是指需要提取 ...
- 04 bbed修复system文件头损坏
04 bbed修复system文件头损坏 1 启动数据库,查看trace,在mount到open, SQL> startup mount; ORACLE instance started. To ...
- 【Unity Shader】---准确认识SubShader语义块结构、渲染状态设定、Tags标签
一[SubShader] 每个UnityShader文件可以包含多个SubShader语义块,但至少要有一个.当Unity需要加载这个UnityShader时,Unity会扫描所有的SubShader ...
- == 和 equals的区别
== 和 equals的区别 基本类型:== 比较的是两个变量的面值大小 对象对象: 比较的是内存地址 特例: String a = "abc" String b = &qu ...