为什么需要CGI协议
因为客户端不能理解cgi协议,web服务器充当了客户端的代理,和后端通信;web服务器通过cgi协议与后端的程序进行交互,完成动态资源调度给前端服务器。
CGI: 通用 网关接口
请求流程:
Client – (http协议) --> httpd – (cgi协议) --> application server (program file) – (mysql协议) --> mysql
CGI使外部程序与Web服务器之间交互成为可能。CGI程序运行在独立的进程中,并对每个Web请求创建一个进程,这种方法非常容易实现,但效率很差,难以扩展。面对大量请求,进程的大量创建和消亡使操作系统性能大大下降。此外,由于地址空间无法共享,也限制了资源重用。
fastcgi: 快速的网关接口
请求流程
Client–(http协议)–httpd–(fastcgi协议)–>fastcgi服务器–(MySQL协议)–mysql
与为每个请求创建一个新的进程不同,FastCGI使用持续的进程来处理一连串的请求。这些进程由FastCGI服务器管理,而不是web服务器。 当进来一个请求时,web服务器把环境变量和这个页面请求通过一个socket比如FastCGI进程与web服务器(都位于本地)或者一个TCP connection(FastCGI进程在远端的server farm)传递给FastCGI进程。
CGI和Fast CGI对比
名称 | 在Web服务器方面 | 在对数据处理的进程方面 |
---|---|---|
Cgi | fork一个新的进程进行处理 | 读取参数,处理数据,然后就结束生命周期 |
Fastcgi | 用tcp方式跟远程主机上的进程或本地进程建立连接 | 要开启tcp端口,进入循环,等待数据的到来,处理数据 |