[FastCGI]

FastCGI

CGI

  • 通用网关接口
  • CGI使外部程序与Web服务器之间交互成为可能
  • CGI程序运行在独立的进程中,并对每个Web请求建立一个进程,这种方法非常容易实现,但效率很差,难以扩展;大量请求,进程的大量建立和消亡使操作系统性能大大下降

CGI处理流程

web服务器与CGI通过环境变量、标准输入、标准输出、标准错误互相传递数据
在这里插入图片描述

  • web服务器收到客户端(浏览器)的请求Http Request,启动CGI程序,并通过环境变量、标准输入传递数据
  • CGI进程启动解析器、加载配置(如业务相关配置)、连接其它服务器(如数据库服务器)、逻辑处理等
  • CGI进程将处理结果通过标准输出、标准错误,传递给web服务器
  • web服务器收到CGI返回的结果,构建Http Response返回给客户端,并杀死CGI进程

环境变量

在这里插入图片描述
GET请求,它将数据打包放置在环境变量QUERY_STRING中,CGI从环境变量
QUERY_STRING中获取数据

标准输入

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

FastCGI

快速通用网关接口(Fast Common Gateway Interface/FastCGI)

FastCGI处理流程

FastCGI程序并不需要不断的产生新进程,可以大大降低服务器的压力并且产生较高的应用效率
在这里插入图片描述

  • 1.Web 服务器启动时载入初始化FastCGI执行环境。 例如IIS、ISAPI、apache mod_fastcgi、nginx ngx_http_fastcgi_module、lighttpd mod_fastcgi
  • 2.FastCGI进程管理器自身初始化,启动多个CGI解释器进程并等待来自Web服务器的连接。启动FastCGI进程时,可以配置以ip和UNIX 域socket两种方式启动
  • 3.当客户端请求到达Web 服务器时, Web 服务器将请求采用socket方式转发FastCGI主进程,FastCGI主进程选择并连接到一个CGI解释器。Web 服务器将CGI环境变量和标准输入发送到FastCGI子进程
  • 4.FastCGI子进程完成处理后将标准输出和错误信息从同一socket连接返回Web 服务器。当FastCGI子进程关闭连接时,请求便处理完成
  • 5.FastCGI子进程接着等待并处理来自Web 服务器的下一个连接

进程管理器管理:spawn-fcgi

spawn-fcgi是一个通用的FastCGI进程管理器,功能主要是打开监听端口,绑定地址,然后fork-and-exec创建我们编写的FastCGI应用程序进程,退出完成工作,FastCGI应用程序初始化,然后进入死循环侦听socket的连接请求

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页