CGI代表的是什么?

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

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

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

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

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

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

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

FastCGI中有一个master进程,负责将基本的环境变量配置,然后master可以产生一些worker进程,这些worker负责处理请求,这样FastCGI可以不断地处理请求。

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

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

侵删。

链接:https://www.zhihu.com/question/19582041/answer/23337307
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值