推荐Blog:

CGI是什么,FastCGI是什么

CGI 是什么

公共网关接口(Common Gateway Interface,CGI)Web 服务器运行时外部程序的规范(或协议),按CGI 编写的程序可以扩展服务器功能

作用:现在所有的 asp、asp.net、php、jsp 等等的动态网页技术,是建立在 CGI 这种规范的通信方式下的 。CGI 支持 C/C++、Java、PHP、Python、Ruby、Perl,Tcl 等各种语言,CGI 可以为我们提供许多HTML无法做到的功能 。用Html是没有办法记住客户的任何信息的,就算用户愿意让你知道。用Html也是无法把信息记录到某一个特定文件里的。要把客户端的信息记录在服务器的硬盘上,就要用到CGI,这是CGI最重要的作用

引用

CGI 特点

公共网关接口 CGI 程序是存放在 HTTP 服务器上,为用户和HTTP服务器之外的其他应用程序提供互相“交谈”手段的软件,其特点是:

公共(Common):无须考虑客户机和服务器所运行的操作系统平台,只要二者的网关程序遵循同一数据传输协议,即可进行数据交互 。

网关(Gateway):CGI 可被用来作为 HTTP 服务器与其他第三方应用程序之间的连接件中间件(Middle Ware)

接口(Interface):CGI 使用标准通讯机制,为其它应用程序与 HTTP 服务器提供数据传输接口 。用 CGI 可以实现处理表格,数据库查询,发送电子邮件或控制服务器端硬件等许多操作 。

CGI 的流程

使用CGI实现客户端与服务器的交互有以下几个标准步骤,具体步骤如下:

(1)Web 客户端的浏览器将URL的第一部分解码与Web服务器相连 。

(2)Web 浏览器将URL的其余部分提供给服务器 。

(3)Web 服务器将URL转换成路径和文件名 。

(4)Web 服务器发送 HTML 和别的组成请求页面的文件给客户。一旦页面内容传送完,这个连接自动断开 。

(5)在客户端,HTML脚本提示用户做动作或输入。当用户响应后,客户请求Web服务器建立一个新的连接 。

(6)Web 服务器把这些信息和别的进程变量传送给由HTML以URL的形式指定CGI程序 。

(7)CGI 根据输入作出响应,把响应结果传送给 Web 服务器 。

(8)Web 服务器把响应的数据传给客户,完成后关闭连接 。

FastCGI 是什么

FastCGI 其实就是 CGI 的改良版,基本性质和 CGI 是相同的;FastCGI 可以理解成一个常驻(long-live)型的 CGI,只需调用一次,便一直执行着,不会为了每一个请求,都花费时间去 fork 一个新的进程,这也是 CGI 最为人诟病的 fork-and-execute 模式 。FastCGI 同样支持 C/C++、Java、PHP、Python、Ruby、Perl,Tcl 等各种语言,并兼容 CGI

CGI & FastCGI(转载

(1)cgi:它是一种协议。通过cgi协议,web server可以将动态请求和相关参数发送给专门处理动态内容的应用程序。

(2)fastcgi:也是一种协议,只不过是cgi的优化版。cgi的性能较烂,fastcgi则在其基础上进行了改进。

(3)php-cgi:fastcgi是一种协议,而php-cgi实现了这种协议。不过这种实现比较烂。它是单进程的,一个进程处理一个请求,处理结束后进程就销毁。

(4)php-fmp:是对php-cgi的改进版,它直接管理多个php-cgi进程/线程。也就是说,php-fpm是php-cgi的进程管理器,因此它也算是fastcgi协议的实现。在一定程度上讲,php-fpm与php的关系,和tomcat对java的关系是类似的。

(5)cgi进程/线程:在php上,就是php-cgi进程/线程。专门用于接收web server的动态请求,调用并初始化zend虚拟机

(6)cgi脚本:被执行的php源代码文件。

(7)zend虚拟机:对php文件做词法分析、语法分析、编译成opcode(Operate Code),并执行。最后关闭zend虚拟机。

(8)opcode:PHP解释器完成对脚本代码的分析后,便将它们生成可以直接运行的中间代码。

(9)cgi进程/线程和zend虚拟机的关系:cgi进程调用并初始化zend虚拟机的各种环境。

以php-fpm为例,web server从转发动态请求到结束的过程大致如下:

而每个php-cgi进程的作用大致包括:(有些功能分类错误,请无视,知道大致功能就够了)

注意,尽管php-fpm的全称为PHP FastCGI Process Manager,但严格地讲,php-fpm不是fastcgi的进程管理器,而是php fastcgi即php-cgi的进程管理器。fastcgi只是一种协议,不是进程。就像http协议一样,apache对它的实现是httpd,nginx对它的实现就叫nginx。

再次说明,cgi和fastcgi是一种协议。各种支持和WEB交互的编程语言对cgi/fastcgi协议都做了各自的实现(当然,任何一种语言都能写cgi脚本),而php上的php-cgi和php-fpm正是php对fastcgi协议的实现。

CGI & FastCGI 协议的更多相关文章

  1. CGI 和 FastCGI 协议的运行原理

    目录 介绍 深入CGI协议 CGI的运行原理 CGI协议的缺陷 深入FastCGI协议 FastCGI协议运行原理 为什么是 FastCGI 而非 CGI 协议 CGI 与 FastCGI 架构 再看 ...

  2. 【转】CGI 和 FastCGI 协议的运行原理

    介绍 深入CGI协议 CGI的运行原理 CGI协议的缺陷 深入FastCGI协议 FastCGI协议运行原理 为什么是 FastCGI 而非 CGI 协议 CGI 与 FastCGI 架构 再看 Fa ...

  3. CGI,FAST-CGI,PHP-FPM的区别

    http://blog.csdn.net/xsgnzb/article/details/52875331 CGI全称Common Gateway Interface即公共网关接口,它遵循cgi规范,定 ...

  4. PHP 进阶之路 - 深入理解 FastCGI 协议以及在 PHP 中的实现

    在讨论 FastCGI 之前,不得不说传统的 CGI 的工作原理,同时应该大概了解 CGI 1.1 协议 传统 CGI 工作原理分析 客户端访问某个 URL 地址之后,通过 GET/POST/PUT ...

  5. cgi fast-cgi php-fpm区别

    php-cli 是php在系统执行的程序,直接执行php文件: cgi和fast-cgi的区别1.cgi和fast-cgi都是php解析协议,负责解析服务器分发过来的php动态文件:cgi程序就会去解 ...

  6. fastcgi协议之一:定义

    参考 深入理解fastcgi协议以及在php中的实现 https://mengkang.net/668.html fastcgi协议规范内容 http://andylin02.iteye.com/bl ...

  7. 详解php的安装模式---CGI,FASTCGI,php-fpm,mod_php,mod_cgi,mod_fcgid

    1. CGI CGI是通用网关接口,HTTP服务器使用这样的接口程序来和“其他程序”(比如PHP的解释器程序)通讯,这个“其他程序”可以使用任何计算机语言来编写,它通过CGI这个接口从HTTP服务器取 ...

  8. CGI FastCGI PHP-CGI PHP-FRM

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

  9. cgi fastcgi php-cgi php-fpm

      参考: 摘至:http://www.cnblogs.com/thinksasa/p/4497567.html 详说fastcgi,php-fpm的区别:http://segmentfault.co ...

随机推荐

  1. SAP中数据库表长度的界定

    SAP中,如何查看表和关键字的长度?通过SE11菜单栏Extras->table width 可以看到.然而SAP在系统也会将表分类,特别是在可扩展的表维护视图中,分为如下几类      ult ...

  2. web项目启动链接mysql巨慢

    说明:项目部署到测试服务器上,mysql部署在另一台服务器上,项目第一次启动之后登陆后台很慢,大概30s左右,经查发现第一次访问数据库的时候会通过DNS解析客户端机器域名,mysql还有DNS反向解析 ...

  3. git的使用学习笔记4--创建分支

    1.在git上新建分支 查看本地分支 git branch 查看远程分支 git branch -a 创建一个分支 git checkout -b branch1 再次查看远程分支可以看到该分支 2. ...

  4. JVM虚拟机垃圾回收(GC)算法及优缺点

    一.什么是GC   GC是jvm的垃圾回收,垃圾回收的规律和原则为:   次数上频繁收集新生区(Young)   次数上较少收集养老区(Old)   基本上不动永久区(Perm) 二.GC算法(分代收 ...

  5. (Oracle)DDL及其数据泵导入导出(impdp/expdp)

    create tablespace ybp_dev datafile 'G:\app\Administrator\oradata\health\ybp_dev1.dbf' size 10m autoe ...

  6. 关于MongoDB的简单理解(二)--Java篇

    一.声明 本文依赖于 MongoDB JVM DRIVERS 4.1 版本编写. 本文案例依赖于 Maven 项目管理工具. 二.本文主要讲解哪些内容? 如何连接到MongoDB 通过TLS/SSL连 ...

  7. LOJ10163 Amount of Degrees

    题目描述 求给定区间 [X,Y] 中满足下列条件的整数个数:这个数恰好等于 KK 个互不相等的 BB 的整数次幂之和.例如,设 X=15,Y=20,K=2,B=2,则有且仅有下列三个数满足题意 输入格 ...

  8. Web漏洞扫描-AWVS

    Web漏洞扫描-AWVS 一.AWVS概述 二.功能以及特点 三.AWVS界面 四.AWVS使用 相关优质博文: CSDN:帽子不够白:WEB渗透测试之三大漏扫神器 一.AWVS概述 Acunetix ...

  9. Office系列---将Office文件(Word、PPT、Excel)转换为PDF文件,提取Office文件(Word、PPT)中的所有图片

    将Office文件转换为PDF文件,提取Office文件中的所有图片 1.Office系列---将Office文件(Word.PPT.Excel)转换为PDF文件 1.1 基于Office实现的解决方 ...

  10. 渗透测试流程——渗透测试的9个步骤(转)

    目录 明确目标 分析风险,获得授权 信息收集 漏洞探测(手动&自动) 漏洞验证 信息分析 利用漏洞,获取数据 信息整理 形成报告 1.明确目标 1)确定范围:测试的范围,如:IP.域名.内外网 ...