一、概述

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

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

二、 FastCGI 与 CGI

2.1 相同点

  • 与 CGI 一样, FastCGI 也是语言无关的
  • 与 CGI 一样, FastCGI 在独立于Web服务器的(FastCGI)进程中运行应用程序,这种方式相对于 API 来说,具有更高的安全性。 API 将程序代码接口连接到Web服务器中,这可能导致:当某一个基于 API 的程序出现 bug 时,就会影响到其他应用程序或Web服务器。例如,一个恶意的基于 API 的程序可以从其他的应用程序或Web服务器中窃取关键的安全秘密
  • 与 CGI 一样, FastCGI 与任何Web服务器的内部架构都不存在绑定关系,因此,当Web服务器技术改变时, FastCGI 依旧很稳定。如果某个 API 与Web服务器的内部架构有关联,那么当Web服务器的架构发生变化时,这个 API 也要做出相应的改变

2.2 不同点

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

  • 分布式计算:我们可以Web服务器以外的机器上运行 FastCGI 应用程序。分布式计算是一项经过验证的技术,该技术应用于:调整、连接已存在的合作系统,充分利用系统性能,提升系统安全性(如 firewalls)
  • 多角色与可扩展角色: CGI 应用程序处理HTTP请求并给出返回值, FastCGI 的功能不止于此,例如,执行模块化的认证和身份检查、转换数据格式。FastCGI 的这些特性使其将来可充当更多的角色。

三、架构图

FastCGI 的架构图如下:

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两种方式启动。

【循环阶段】:

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

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

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

四、补充

CGI介绍

4.1. 概念、背景及架构

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文档后,发送给浏览器,也可以将从浏览器获得的数据放到数据库中。如下图:

几乎所有Web服务器都支持CGI,我们可用多种语言编写CGI(包括流行的C、C ++等),只要这种语言具有标准输入、输出和环境变量。

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

4.2 CGI程序处理步骤

1. 浏览器通过HTML表单或超链接,请求指向一个CGI应用程序的URL;

2. 服务器收到浏览器发送的请求;

3. 服务器调用执行指定CGI应用程序;

4. CGI应用程序根据相关信息(通常是基于浏览者输入的内容),执行具体的操作;

5. CGI应用程序把操作结果格式化为网络服务器和浏览器能够理解的文档(通常是HTML网页),并发送给web服务器;

6. web服务器把操作结果返回给浏览器。

由于环境变量的大小是有一定限制的,当需要传送的数据量很大时,环境变量的存储空间可能会不足,造成传输数据接收不完全,甚至无法执行 CGI 程序。因此,后来又发展出另外一种方法:POST,也就是利用 I/O 重新导向的技巧,让 CGI 程序可以由 STDIN 和 STDOUT 直接跟浏览器沟通。当我们指定用这种方法传递请求的数据时, web 服务器收到数据后,会先将这些数据放在一块输入缓冲区中,并且将数据的大小记录在 CONTENT_LENGTH 环境变量中,然后调用 CGI 程序并将 CGI 程序的 STDIN 指向这块缓冲区,于是我们就可以很顺利的通过 STDIN 和环境变量 CONTENT_LENGTH 得到服务器接收的信息,避免了对传输信息大小的限制。

4.3 CGI的优缺点

CGI可以为我们提供许多HTML无法做到的功能,比如记数器、顾客信息表格的提交以及统计、搜索程序、WEB数据库等。

用Html是没有办法记住客户的任何信息的,要把客户端的信息记录在服务器的硬盘上,就要用到CGI,这是CGI最重要的作用,它补充了Html的不足,注意:仅仅是补充,不是替代。

CGI 使外部程序与 Web 服务器之间交互成为可能, CGI 程序运行在独立的进程中,并对每个 Web 请求建立一个进程,这种方法非常容易实现,但效率很差,难以扩展。当面对大量请求时,进程的大量建立和消亡会使操作系统性能大大下降,此外,由于地址空间无法共享,也限制了资源重用。1. 概念、背景及架构

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文档后,发送给浏览器,也可以将从浏览器获得的数据放到数据库中。如下图:

几乎所有Web服务器都支持CGI,我们可用多种语言编写CGI(包括流行的C、C ++等),只要这种语言具有标准输入、输出和环境变量。

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

4.4CGI程序处理步骤

1. 浏览器通过HTML表单或超链接,请求指向一个CGI应用程序的URL;

2. 服务器收到浏览器发送的请求;

3. 服务器调用执行指定CGI应用程序;

4. CGI应用程序根据相关信息(通常是基于浏览者输入的内容),执行具体的操作;

5. CGI应用程序把操作结果格式化为网络服务器和浏览器能够理解的文档(通常是HTML网页),并发送给web服务器;

6. web服务器把操作结果返回给浏览器。

由于环境变量的大小是有一定限制的,当需要传送的数据量很大时,环境变量的存储空间可能会不足,造成传输数据接收不完全,甚至无法执行 CGI 程序。因此,后来又发展出另外一种方法:POST,也就是利用 I/O 重新导向的技巧,让 CGI 程序可以由 STDIN 和 STDOUT 直接跟浏览器沟通。当我们指定用这种方法传递请求的数据时, web 服务器收到数据后,会先将这些数据放在一块输入缓冲区中,并且将数据的大小记录在 CONTENT_LENGTH 环境变量中,然后调用 CGI 程序并将 CGI 程序的 STDIN 指向这块缓冲区,于是我们就可以很顺利的通过 STDIN 和环境变量 CONTENT_LENGTH 得到服务器接收的信息,避免了对传输信息大小的限制。

4.5 CGI的优缺点

CGI可以为我们提供许多HTML无法做到的功能,比如记数器、顾客信息表格的提交以及统计、搜索程序、WEB数据库等。

用Html是没有办法记住客户的任何信息的,要把客户端的信息记录在服务器的硬盘上,就要用到CGI,这是CGI最重要的作用,它补充了Html的不足,注意:仅仅是补充,不是替代。

CGI 使外部程序与 Web 服务器之间交互成为可能, CGI 程序运行在独立的进程中,并对每个 Web 请求建立一个进程,这种方法非常容易实现,但效率很差,难以扩展。当面对大量请求时,进程的大量建立和消亡会使操作系统性能大大下降,此外,由于地址空间无法共享,也限制了资源重用。

五、总结

由于 FastCGI 程序并不需要不断产生新进程,因此使用 FastCGI 可以大大降低Web服务器的压力并产生较高的应用效率。

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


首先恭喜您,能够认真的阅读到这里,如果对部分理解不太明白,建议先将文章收藏起来,然后对不清楚的知识点进行查阅,然后在进行阅读,相应你会有更深的认知。如果您喜欢这篇文章,就点个赞或者【关注我】吧!!

html请求接口_通用网关接口-FastCGI介绍相关推荐

  1. php 网关接口,[PHP] 通用网关接口CGI 的运行原理

    CGI 的运行原理: 1.客户端访问某个 URL 地址之后,通过 GET/POST/PUT 等方式提交数据,并通过 HTTP 协议向 Web 服务器发出请求. 2.服务器端的 HTTP Daemon( ...

  2. WEB通用网关接口:CGI简单教程

    CGI 全称为Common Gateway Interface (通用网关接口),目的是能够让服务器能够方便的调用外部程序. CGI本身是一套协议和规范,原则上只要是拥有读写文件功能的编程语言都可以用 ...

  3. 抖音小店商品接口_抖音接口

    抖音小店商品接口_抖音接口 {"msg": "","code": 200,"data": {"toast&qu ...

  4. 同一个项目相互调接口_超详细——接口测试总结与分享(一)

    1,接口的概念 1.接口是啥? 接口是传递数据的通道 接口测试: 是测试系统组件间接口的一种测试 接口主要包括: 同一个系统中模块与模块间的接口/前端后端接口, 另一个是跨系统平台与平台间的对接(内部 ...

  5. 雷电2接口_“雷电3”接口知识大科普

    近年来部分高端笔记本电脑在接口上会采用一种叫"雷电3"的新接口.今天小编就为大家解读一下"雷电3"接口的特性. 最早的雷电接口 雷电接口是由Intel开发定制的 ...

  6. python 期货交易接口_期货数据接口(期货数据接口 python)

    期货数据接口,聚宽,恒生聚宽,菜狗均可以接口聚宽ip列表小收费:聚宽聚宽-trader.com恒生聚宽ip列表,nae 我们公司用股票接口,你可以试一下websocket.high.js这个 聚宽和华 ...

  7. java 匿名接口_匿名内部类实现接口

    何为匿名内部类: 如果接口的实现类或者父类的子类,只需要使用一次 这种情况下就可以省略掉该类的定义,而改为使用[匿名内部类] 匿名内部类的定义格式 接口名称 对象名 = new 接口名称(){ //覆 ...

  8. 显示器接口_电脑显示器接口类型哪个好?VGA、DVI、HDMI、DP接口区别对比科普

    众所周知,不同的显示器显示接口支持的也不同,我们老电脑一般使用的是VGA,而现在很多开始逐渐主流DVI,要求高一些可能会考虑HDMI,甚至DP接口,为了电脑显示器获得更好的显示效果,经常会有用户有这样 ...

  9. rca接口_从模拟接口到8K传输 显卡接口这些年变得太多

    [PConline硬件编年史]在英伟达RTX30系列显卡发售前夕,我们将和跟大家一起回顾一下显卡史上的一些有趣内容,这一期我们首先来聊聊显卡视频输出接口的发展. 显卡上的视频输出接口的发展主要就是为了 ...

最新文章

  1. 如果理解运算符和各类数值的布尔值
  2. 自己收集的一些技术blog-javascript
  3. java的log4j的xml配置_Log4j配置实例(log4j.xml)
  4. 禁用/启用按钮和链接的最简单方法是什么(jQuery + Bootstrap)
  5. 15.4.3 用于Generator的泛型方法
  6. CDN技术之--流媒体CDN系统的组成
  7. 基于实数编码的参数自适应遗传算法(matlab代码)
  8. day059-60 ajax初识 登录认证练习 form装饰器, form和ajax上传文件 contentType
  9. hp1015驱动64位_HP LaserJet 1015 驱动下载
  10. 第六章jQuery选择器
  11. 易语言基于HTML(网页)开发软件界面UI的方法
  12. 惯量比多少合适_惯量比折算问题
  13. 初等数论及python应用
  14. 七夕节程序员应有的表白方式
  15. ios 关于MBProgressHUD简单实用
  16. 爆款制作获1200w播放,B站UP主+品牌如何迈入2023
  17. 程序员的自我修养阅读笔记
  18. MFC学习笔记--组合框Combo Box一些操作
  19. 机器人单关节力矩控制
  20. JVM-java虚拟机空间模型

热门文章

  1. yii2 mysql_Yii2 数据库操作汇总
  2. android 全局 socket,学习Android socket通信之如何解决中文乱码
  3. 7-1 最大子列和问题 (20 分)
  4. android+qq登录测试,对于android的第三方(QQ登录,微信登录等的)测试时的签名配置...
  5. 【2012百度之星/资格赛】B:小诺爱USB设备
  6. Redis入门(二)安装和基本操作
  7. 封装、继承、多态的理解
  8. (三)ORB特征匹配
  9. pandas,apply并行计算的一个demo
  10. java_io_listFile()的应用和匿名内部类