CGI与fastCGI的区别

作者:lujjjh
链接:https://www.zhihu.com/question/19582041/answer/23337307
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

我理解的 CGI 是狭义上的 CGI,即不包含 FastCGI。

对一个 CGI 程序,做的工作其实只有:从 环境变量(environment variables)标准输入(standard input)中读取数据、处理数据、向 标准输出(standard output)输出数据。

环境变量中存储的叫 Request Meta-Variables,也就是诸如 QUERY_STRINGPATH_INFO 之类的东西,这些是由 Web Server 通过环境变量传递给 CGI 程序的,CGI 程序也是从环境变量中读取的。

标准输入中存放的往往是用户通过 PUTS 或者 POST 提交的数据,这些数据也是由 Web Server 传过来的。

就比如,我们刚学 C 语言时写的 Hello World,也可以作为一个合法的 CGI 程序。

现在用 CGI 的已经很少了,因为每个 CGI 进程只处理一个请求,换句话说,每个请求都需要创建一个 CGI 进程处理,CGI 程序处理完毕后就退出了。

FastCGI 正是对 CGI 的改进,而且改进了不是一点点。

从总体上看,一个 FastCGI 进程可以处理若干请求(一般 FastCGI 进程是驻留着的,但不排除 IIS 之类的 Web Server 限制其空闲时间,在一段时间内没有请求就自动退出的可能),Web Server 或者 fpm 会控制 FastCGI 进程的数量。

细节方面,FastCGI 是一套协议,不再是通过简单的环境变量、标准输入和标准输出来接收和传递数据了。一般来说,FastCGI 用 TCP 或者 命名管道(Named Pipe)传输数据。

现在绝大多数 PHP 网站都是在用 FastCGI 的。

因此,这个问题的答案取决于题主对 CGI 的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值