CGI、PHP-CGI、FastCGI
CGI
一. CGI是什么
CGI,全称是Common Gateway Interface,翻译过来就是“通用网关接口”,定义了一个接口标准,描述了数据怎么在服务器和外部应用程序之间怎么传递。
二. CGI的来历
在很早之前,互联网只有些静态内容,浏览器发送资源请求,服务器接受请求并返回服务器上的静态文件即可。
随着互联网的发展,动态内容产生了,这些动态内容涉及到了数据库,能够操作数据库的动态语言将数据处理后返回给WebServer,WebServer再返回给浏览器。
由于有很多种动态语言和很多种浏览器,它们之间面临着不兼容的情况,这时候就需要在它们之间设立一个接口标准,这就是CGI。浏览器发起请求,WebServer会将请求发给对应的CGI程序,CGI再调用外部程序来处理请求并返回结果。
三. CGI的作用
WebServer是通过如下方式来CGI程序进行通信的,所以只要支持标准输入输出和环境变量的语言,都能用来编写CGI程序。
环境变量(请求类型,请求IP..)
标准输入(请求主体)
标准输出(请求响应)
CGI描述了如何在环境变量中传递请求的基本信息,如何通过标准输入传递请求体,以及如何通过标准输出来传递输出。这就使编程语言可以很容易得使用环境变量、标准输入输出
四. CGI的缺点
WebServer在接收到请求时,会先fork出CGI进程,然后处理请求,处理完后结束这个进程,这就是 fork-and-execute 模式。所以用 CGI 方式的服务器有多少连接请求就会有多少 CGI 进程,每个进程都会加载解析PHP配置,初始化执行环境,那么当高并发请求时,会大量挤占系统的资源如内存,CPU 时间等,造成效能低下。
PHP-CGI
PHP-CGI是php的CGI程序,不进行进程管理
FastCGI
一. FastCGI的简介
FastCGI是Web服务器和处理程序之间通信的一种协议, 是CGI的一种改进方案,FastCGI像是一个常驻(long-lived)型的CGI, 它可以一直执行,在请求到达时不会花费时间去fork一个进程来处理(这是CGI最为人诟病的fork-and-execute模式)。 正是因为他只是一个通信协议,它还支持分布式的运算,所以 FastCGI 程序可以在网站服务器以外的主机上执行,并且可以接受来自其它网站服务器的请求。
FastCGI 是与语言无关的、可伸缩架构的 CGI 开放扩展,将 CGI 解释器进程保持在内存中,以此获得较高的性能。 CGI 程序反复加载是 CGI 性能低下的主要原因,如果 CGI 程序保持在内存中并接受 FastCGI 进程管理器调度, 则可以提供良好的性能、伸缩性、Fail-Over 特性等。
二. FastCGI工作流程
- FastCGI 进程管理器自身初始化,启动多个 CGI 解释器进程,并等待来自 Web Server 的连接。
- Web 服务器与 FastCGI 进程管理器进行 Socket 通信,通过 FastCGI 协议发送 CGI 环境变量和标准输入数据给 CGI 解释器进程。
- CGI 解释器进程完成处理后将标准输出和错误信息从同一连接返回 Web Server。
- CGI 解释器进程接着等待并处理来自 Web Server 的下一个连接。
FastCGI 与传统 CGI 模式的区别之一则是 Web 服务器不是直接执行 CGI 程序了,而是通过 Socket 与 FastCGI 响应器(FastCGI 进程管理器)进行交互,也正是由于 FastCGI 进程管理器是基于 Socket 通信的,所以也是分布式的,Web 服务器可以和 CGI 响应器服务器分开部署。Web 服务器需要将数据 CGI/1.1 的规范封装在遵循 FastCGI 协议包中发送给 FastCGI 响应器程序。
CGI、PHP-CGI、FastCGI相关推荐
- 六、访问CGI变量 (基础教程6)
六.访问CGI变量 作 者 : 仙人掌工作室 6.1 CGI变量概述 如果你是从传统的CGI编程转而学习Java Servlet,或许已经习惯了"CGI变量 ...
- 增加fast cgi进程数 php7,使用 FastCGI 模式运行 PHP7 教程
[摘要] PHP即"超文本预处理器",是一种通用开源脚本语言.PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言.PHP独特的语法混合了C.Java.Perl以及 ...
- Nginx运行FastCGI程序(ngx_http_fastcgi_module模块、fcgi库、spwan-fcgi进程管理器)
一.什么是CGI 通用网关接口(Common Gateway Interface.CGI)描述了客户端和服务器程序之间传输数据的一种标准,可以让一个客户端,从网页浏览器向执行在网络服务器上的程序请求数 ...
- SSRF - ctfhub -2【FastCGI协议、Redis协议、URL Bypass、数字IP Bypass、302跳转 Bypass、DNS重绑定Bypass】
FastCGI协议 知识参考:CTFhub官方链接 首先介绍一下原理(这里简单介绍,详情请看官方附件) 如果说HTTP来完成浏览器到中间件的请求,那么FastCGI就是从中间件到某语言后端进行交换的协 ...
- 马哥教育第二十二天IO模型理论、数据库基础理论、LAMP平台理论基础及mysql部署...
1.IO模型理论基础详解: http或https都是基于tcp协议完成通讯.在tcp中使用socket通讯模型,在domain中界定socket是如何定义. ...
- centos php mysql 5.6 安装_centos7安装nginx、php5.5、mysql5.6
一.nginx 1.安装 yum install nginx 2.启动 systemctl start nginx 关闭:systemctl stop nginx 重启:systemctl resta ...
- Docker、Docker file、Docker-compose 详解
文章目录 第1章容器与虚拟化区别 1.1本质区别 1.2比较 1.3容器种类 1.4docker三大核心 1.5容器隔离内容 第2章docker安装 2.1阿里云 2.2版本 2.3镜像加速 2.3. ...
- (23)【漏洞利用】【原理、利用过程】中间件解析漏洞、CMS漏洞、编辑器漏洞、CVE漏洞
目录 解析漏洞: 原理: 变化因素: 熟知的中间件(解析漏洞) 0x01 IIS5.x-6.x解析漏洞: (1)目录解析漏洞(IIS6.0) 原理: 利用过程: (2)文件解析漏洞 原理: 利用 ...
- 对PHP并发、多进程、多线程、异步处理、分布式系统的一些了解
目录 并发 基本概念 PHP并发模型 多进程 基本概念 进程 多进程 并发多任务 任务调度 PHP实现多进程 PCNTL PHP-FPM Swoole 多线程 基本概念 线程 多线程 PHP实现多线程 ...
- 面试1:Java、微服务、架构常见面试题(持续更新中)
Java.微服务.架构常见面试题(持续更新中) 文章目录 Java.微服务.架构常见面试题(持续更新中) ==**Java**== 1.Java概述 (1)JVM.JRE和JDK (2)Java特点 ...
最新文章
- 不断提升自己创造溢价的能力
- jar包打补丁 jar -uf_maven项目引入本地jar包的方法
- Solr增删改查索引
- Cisco ftp linux 权限,在Cisco设备上利用FTP传IOS文件
- Javascript实现子窗口向父窗口传值(转)
- vb2008 获取mac地址_华为 荣耀路由Pro 设置MAC地址克隆的方法?华为荣耀路由器怎么设置...
- 一篇文章带你彻底了解Kubernetes
- 油管上最火的java面试题集合
- 如何使用 iOS 7 的 AVSpeechSynthesizer 制作有声书(1)
- 大厂Java面试过程中如何介绍自己的项目经历?
- 2020.04.08【NOIP普及组】模拟赛C组24 总结
- Invalid format specifier的解决方法
- RPM包安装的数据库进行版本升级
- RNA-seq的典型流程(protocol)
- 历届图灵奖得主及研究领域
- Linux-linux系统函数
- 洛谷 P5707 上学迟到
- Nhibernate心得
- JAVA怎么给手机发短信对接验证码短信接口DEMO示例
- AI测温落地趋势:已成日常刚需 产品形态呈细分化发展
热门文章
- .net 一些常用的工具来破解
- redhat6.3下安装ORACLE11.2.3RAC
- 电源噪声(EMI)滤波器的基本原理与应用方法
- 机器学习和算法学习网址
- Yii2.0 rules验证规则大全
- WebCruiser Web Security Scanner
- CSS缩小窗口时,背景图出现右侧空白
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(45)-工作流设计-设计步骤
- Javascript: IE中命名函数直接量的Bug?
- 【bzoj 3595】: [Scoi2014]方伯伯的Oj