CGI与FastCGI详解与区别

CGI与FastCGI详解与区别

  • 一、CGI介绍
    • CGI程序处理步骤:
  • 二、FastCGI介绍
    • FastCGI 的工作流程如下:
  • 三、FastCGI 与 CGI相同点与不同点
    • 3.1 相同点
    • 3.2 不同点

一、CGI介绍

CGI(Common Gateway Interface),即通用网关接口,是WWW技术中最重要的技术之一,是外部应用程序(即CGI程序)与WEB服务器之间的接口标准,负责在CGI程序和Web服务器之间传递信息。
CGI是Web服务器运行时,调用外部应用程序(即CGI程序)的规范,CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的、新的交互式媒体,按照CGI编写的程序可以扩展Web服务器功能。

出现背景: CGI是比较原始的开发动态网站的方式。由于静态的html页面无法实现网站的动态内容的生成,所以就需要由web服务器调用CGI程序,CGI程序生成动态内容,返回给web服务器,web服务器再返回给浏览器。

CGI应用程序能通过Web服务器与浏览器进行交互,还可以通过数据库API与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据,将数据格式化为HTML文档后,发送给浏览器,也可以将从浏览器获得的数据放到数据库中。如下图:
CGI与FastCGI详解与区别_第1张图片
几乎所有Web服务器都支持CGI,我们可用多种语言编写CGI(包括流行的C、C ++等),只要这种语言具有标准输入、输出和环境变量。

大多数的CGI程序被用来解释处理来自表单的输入信息,并在服务器产生相应的处理,或将相应的信息反馈给浏览器,CGI程序使网页具有了交互功能。

CGI程序处理步骤:

1.浏览器通过HTML表单或超链接,请求指向一个CGI应用程序的URL;
2.服务器收到浏览器发送的请求;
3.服务器调用执行指定CGI应用程序;
4.CGI应用程序根据相关信息(通常是基于浏览者输入的内容),执行具体的操作;
5.CGI应用程序把操作结果格式化为网络服务器和浏览器能够理解的文档(通常是HTML网页),并发送给web服务器;
6.web服务器把操作结果返回给浏览器。

二、FastCGI介绍

FastCGI 实际上是增加了一些扩展功能的 CGI 、是 CGI 的改进,描述了客户端和Web服务器程序之间传输数据的一种标准。

FastCGI 致力于减少Web服务器与CGI程序之间进行互动的开销,从而使Web服务器可以同时处理更多的Web请求。与 CGI 为每个Web请求创建一个新的进程不同, FastCGI 使用持续的进程来处理一连串的Web请求,这些进程由FastCGI进程管理器管理,而不是Web服务器。

CGI与FastCGI详解与区别_第2张图片
由于 FastCGI 程序并不需要不断产生新进程,因此使用 FastCGI 可以大大降低Web服务器的压力并产生较高的应用效率。

CGI 就是所谓的短生存期应用程序,而 FastCGI 就是所谓的长生存期应用程序, FastCGI 像是一个常驻(long-live)型的 CGI , FastCGI 可以一直执行着,而不会每次花费时间去fork(这也是 CGI 最为人诟病的 fork-and-execute 模式)。

FastCGI 的工作流程如下:

【准备阶段】:

  1. Web服务器启动时,初始化 FastCGI 的程序执行环境。例如 Nginx 服务器对应的 ngx_http_fastcgi_module 模块

  2. FastCGI进程管理器自身初始化,启动多个CGI解释器进程并等待来自Web服务器的连接。例如,使用 spawn-fcgi FastCGI进程管理器启动 demo :

spawn-fcgi -a 127.0.0.1 -p 8080 -f /opt/nginx-1.7.7/cgi-bin/demo

说明:启动 FastCGI 进程时,可以配置以 IP 或UNIX域socket两种方式启动。

【循环阶段】:

  1. 当客户端请求到达Web服务器时,Web服务器将该请求采用socket方式转发到 FastCGI 主进程, FastCGI 主进程选择并连接到一个CGI解释器(关联 FastCGI 子进程),然后,Web服务器将CGI环境变量和标准输入发送到 FastCGI 子进程。

  2. FastCGI 子进程完成处理后,将标准输出和错误信息从同一socket连接返回给Web服务器。最后, FastCGI 子进程关闭与Web服务器之间的连接。

  3. FastCGI 子进程继续等待并处理下一个来自Web服务器的连接。

三、FastCGI 与 CGI相同点与不同点

3.1 相同点

与 CGI 一样, FastCGI 也是语言无关的

与 CGI 一样, FastCGI 在独立于Web服务器的(FastCGI)进程中运行应用程序,这种方式相对于 API 来说,具有更高的安全性。 API 将程序代码接口连接到Web服务器中,这可能导致:当某一个基于 API 的程序出现 bug 时,就会影响到其他应用程序或Web服务器。例如,一个恶意的基于 API 的程序可以从其他的应用程序或Web服务器中窃取关键的安全秘密

与 CGI 一样, FastCGI 与任何Web服务器的内部架构都不存在绑定关系,因此,当Web服务器技术改变时, FastCGI 依旧很稳定。如果某个 API 与Web服务器的内部架构有关联,那么当Web服务器的架构发生变化时,这个 API 也要做出相应的改变

3.2 不同点

FastCGI 不仅继承了 CGI 的优点,而且还新增了若干新功能。

分布式计算:我们可以Web服务器以外的机器上运行 FastCGI 应用程序。分布式计算是一项经过验证的技术,该技术应用于:调整、连接已存在的合作系统,充分利用系统性能,提升系统安全性(如 firewalls)

多角色与可扩展角色: CGI 应用程序处理HTTP请求并给出返回值, FastCGI 的功能不止于此,例如,执行模块化的认证和身份检查、转换数据格式。FastCGI 的这些特性使其将来可充当更多的角色。

你可能感兴趣的:(企业实战,面试常见问题)