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工作流程

  1. FastCGI 进程管理器自身初始化,启动多个 CGI 解释器进程,并等待来自 Web Server 的连接。
  2. Web 服务器与 FastCGI 进程管理器进行 Socket 通信,通过 FastCGI 协议发送 CGI 环境变量和标准输入数据给 CGI 解释器进程。
  3. CGI 解释器进程完成处理后将标准输出和错误信息从同一连接返回 Web Server。
  4. CGI 解释器进程接着等待并处理来自 Web Server 的下一个连接。

FastCGI 与传统 CGI 模式的区别之一则是 Web 服务器不是直接执行 CGI 程序了,而是通过 Socket 与 FastCGI 响应器(FastCGI 进程管理器)进行交互,也正是由于 FastCGI 进程管理器是基于 Socket 通信的,所以也是分布式的,Web 服务器可以和 CGI 响应器服务器分开部署。Web 服务器需要将数据 CGI/1.1 的规范封装在遵循 FastCGI 协议包中发送给 FastCGI 响应器程序。

CGI、PHP-CGI、FastCGI相关推荐

  1. 六、访问CGI变量 (基础教程6)

    六.访问CGI变量   作 者 : 仙人掌工作室          6.1 CGI变量概述       如果你是从传统的CGI编程转而学习Java Servlet,或许已经习惯了"CGI变量 ...

  2. 增加fast cgi进程数 php7,使用 FastCGI 模式运行 PHP7 教程

    [摘要] PHP即"超文本预处理器",是一种通用开源脚本语言.PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言.PHP独特的语法混合了C.Java.Perl以及 ...

  3. Nginx运行FastCGI程序(ngx_http_fastcgi_module模块、fcgi库、spwan-fcgi进程管理器)

    一.什么是CGI 通用网关接口(Common Gateway Interface.CGI)描述了客户端和服务器程序之间传输数据的一种标准,可以让一个客户端,从网页浏览器向执行在网络服务器上的程序请求数 ...

  4. SSRF - ctfhub -2【FastCGI协议、Redis协议、URL Bypass、数字IP Bypass、302跳转 Bypass、DNS重绑定Bypass】

    FastCGI协议 知识参考:CTFhub官方链接 首先介绍一下原理(这里简单介绍,详情请看官方附件) 如果说HTTP来完成浏览器到中间件的请求,那么FastCGI就是从中间件到某语言后端进行交换的协 ...

  5. 马哥教育第二十二天IO模型理论、数据库基础理论、LAMP平台理论基础及mysql部署...

    1.IO模型理论基础详解:                  http或https都是基于tcp协议完成通讯.在tcp中使用socket通讯模型,在domain中界定socket是如何定义.     ...

  6. 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 ...

  7. 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. ...

  8. (23)【漏洞利用】【原理、利用过程】中间件解析漏洞、CMS漏洞、编辑器漏洞、CVE漏洞

    目录 解析漏洞: 原理: 变化因素: 熟知的中间件(解析漏洞) 0x01    IIS5.x-6.x解析漏洞: (1)目录解析漏洞(IIS6.0) 原理: 利用过程: (2)文件解析漏洞 原理: 利用 ...

  9. 对PHP并发、多进程、多线程、异步处理、分布式系统的一些了解

    目录 并发 基本概念 PHP并发模型 多进程 基本概念 进程 多进程 并发多任务 任务调度 PHP实现多进程 PCNTL PHP-FPM Swoole 多线程 基本概念 线程 多线程 PHP实现多线程 ...

  10. 面试1:Java、微服务、架构常见面试题(持续更新中)

    Java.微服务.架构常见面试题(持续更新中) 文章目录 Java.微服务.架构常见面试题(持续更新中) ==**Java**== 1.Java概述 (1)JVM.JRE和JDK (2)Java特点 ...

最新文章

  1. 不断提升自己创造溢价的能力
  2. jar包打补丁 jar -uf_maven项目引入本地jar包的方法
  3. Solr增删改查索引
  4. Cisco ftp linux 权限,在Cisco设备上利用FTP传IOS文件
  5. Javascript实现子窗口向父窗口传值(转)
  6. vb2008 获取mac地址_华为 荣耀路由Pro 设置MAC地址克隆的方法?华为荣耀路由器怎么设置...
  7. 一篇文章带你彻底了解Kubernetes
  8. 油管上最火的java面试题集合
  9. 如何使用 iOS 7 的 AVSpeechSynthesizer 制作有声书(1)
  10. 大厂Java面试过程中如何介绍自己的项目经历?
  11. 2020.04.08【NOIP普及组】模拟赛C组24 总结
  12. Invalid format specifier的解决方法
  13. RPM包安装的数据库进行版本升级
  14. RNA-seq的典型流程(protocol)
  15. 历届图灵奖得主及研究领域
  16. Linux-linux系统函数
  17. 洛谷 P5707 上学迟到
  18. Nhibernate心得
  19. JAVA怎么给手机发短信对接验证码短信接口DEMO示例
  20. AI测温落地趋势:已成日常刚需 产品形态呈细分化发展

热门文章

  1. .net 一些常用的工具来破解
  2. redhat6.3下安装ORACLE11.2.3RAC
  3. 电源噪声(EMI)滤波器的基本原理与应用方法
  4. 机器学习和算法学习网址
  5. Yii2.0 rules验证规则大全
  6. WebCruiser Web Security Scanner
  7. CSS缩小窗口时,背景图出现右侧空白
  8. ASP.NET MVC5+EF6+EasyUI 后台管理系统(45)-工作流设计-设计步骤
  9. Javascript: IE中命名函数直接量的Bug?
  10. 【bzoj 3595】: [Scoi2014]方伯伯的Oj