在描述CGI和FastCGI的区别前,我们先来看一下什么的CGI和FastCGI。
- CGI
CGI(Common Gateway Interface,公共网关接口)在2000年或更早的时候用得比较多,以前web服务器一般只处理静态的请求,如果碰到一个动态请求,web服务器会根据这次请求的内容fork一个新进程来运行外部的C程序或者bash、perl脚本等,这个进程会把处理完的数据返回给web服务器,最后web服务器把内容发送给用户,刚才fork的进程也随之退出。 如果下次用户还请求改动态脚本,那么web服务器又再次fork一个新进程,周而复始的进行。
(CGI工作原理图)
CGI可以让一个客户端从网页浏览器通过http服务器向执行在网络服务器上的程序传输数据,它描述了客户端和服务器程序之间传输的一种标准 。
- FastCGI
FastCGI(Fast Common Gateway Interface,快速公共网关接口协议)的工作方式是:web服务器收到一个请求时,不会重新fork一个进程,因为这个进程在web服务器启动时就开启了,而且不会退出。web服务器直接把内容传递给这个进程(进程间通信,FastCGI使用的是tcp方式通信),这个进程收到请求后进行处理,把结果返回给web服务器,最后自己接着等待下一个请求的到来,而不是退出。
(FastCGI工作原理图)
- CGI与FastCGI区别
通过以上的工作原理,我们可以看出两者的区别主要表现为:
①在web服务器方面:CGI需要fork一个新的进程来处理,而FastCGI则是用TCP方式跟远程主机上的进程或本地进程进行连接。
②在对数据处理的进程方面:CGI在读取参数、处理数据后结束生命周期,FastCGI则是开启TCP端口,并进入循环,一旦有数据进来就进行数据的处理,不会退出。
通过两者的对比,我们会发现,FastCGI的程序性能会更好,同时安全性也更高,可谓是加强版的CGI,在当前的生产中,一般也是会用FastCGI来代替传统的CGI。