FastCGI—— CGI简介

简介: FastCGI—— CGI简介

CGI


1 什么是CGI


通用网关接口(Common Gateway Interface、CGI)描述了客户端和服务器程序之间传输数据的一种标准,可以让一个客户端,从网页浏览器向执行在网络服务器上的程序请求数据。


CGI独立于任何语言的,CGI 程序可以用任何脚本语言或者是完全独立编程语言实现,只要这个语言可以在这个系统上运行。Unix shell script、Python、 Ruby、PHP、 perl、Tcl、 C/C++和 Visual Basic 都可以用来编写 CGI 程序。


最初,CGI 是在 1993 年由美国国家超级电脑应用中心(NCSA)为 NCSA HTTPd Web 服务器开发的。这个 Web 服务器使用了 UNIX shell 环境变量来保存从 Web 服务器传递出去的参数,然后生成一个运行 CGI 的独立的进程。


2 CGI处理流程



web服务器收到客户端(浏览器)的请求Http Request,启动CGI程序,并通过环境变量、标准输入传递数据


CGI进程启动解析器、加载配置(如业务相关配置)、连接其它服务器(如数据库服务器)、逻辑处理等


CGI进程将处理结果通过标准输出、标准错误,传递给web服务器


web服务器收到CGI返回的结果,构建Http Response返回给客户端,并杀死CGI进程


web服务器与CGI通过环境变量、标准输入、标准输出、标准错误互相传递数据。在遇到用户连接请求:


先要创建CGI子进程,然后CGI子进程处理请求,处理完事退出这个子进程:fork-and-execute


CGI方式是客户端有多少个请求,就开辟多少个子进程,每个子进程都需要启动自己的解释器、加载配置,连接其他服务器等初始化工作,这是CGI进程性能低下的主要原因。当用户请求非常多的时候,会占用大量的内存、cpu等资源,造成性能低下。


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


3 环境变量


GET请求,它将数据打包放置在环境变量QUERY_STRING中,CGI从环境变量QUERY_STRING中获取数据。


常见的环境变量如下表所示:



4 标准输入


环境变量的大小是有一定的限制的,当需要传送的数据量大时,储存环境变量的空间可能会不足,造成数据接收不完全,甚至无法执行CGI程序。


因此后来又发展出另外一种方法:POST,也就是利用I/O重新导向的技巧,让CGI程序可以由stdin和stdout直接跟浏览器沟通。


当我们指定用这种方法传递请求的数据时,web服务器收到数据后会先放在一块输入缓冲区中,并且将数据的大小记录在CONTENT_LENGTH这个环境变量,然后调用CGI程序并将CGI程序的stdin指向这块缓冲区,于是我们就可以很顺利的通过stdin和环境变数CONTENT_LENGTH得到所有的信息,再没有信息大小的限制了。


相关文章
|
3月前
|
安全 数据处理 Apache
CGI
【8月更文挑战第22天】
54 8
|
6月前
|
PHP 调度
PHP CGI、FastCGI、PHP-FPM、PHP-CGI 区别
PHP CGI、FastCGI、PHP-FPM、PHP-CGI 区别
74 5
|
程序员 应用服务中间件 Apache
Ruby:CGI 和 FastCGI
Ruby:CGI 和 FastCGI
|
程序员 应用服务中间件 Apache
Ruby: CGI和 FastCGI
Ruby: CGI和 FastCGI
|
网络协议 应用服务中间件 PHP
CGI、FastCGI、PHP-FPM是干什么的?它们的区别是什么?底层原理是什么?
CGI、FastCGI、PHP-FPM是干什么的?它们的区别是什么?底层原理是什么?
113 0
|
监控 应用服务中间件 PHP
PHP 本身支持 CGI、FastCGI、mod_php、php-fpm的模式区别是什么?底层原理是什么?
PHP 本身支持 CGI、FastCGI、mod_php、php-fpm的模式区别是什么?底层原理是什么?
157 0
|
前端开发 JavaScript 网络协议
万法归宗:CGI
遥想腾讯实习那年,了解到了CGI,这种我以为只出现在教科书中,早就被扫进历史尘埃里的技术竟然还在鹅厂盛行着。一时纠结:我本想来大厂学习新技术,没想到却来这里考古。不过后来我和自己和解了,虽然CGI早被业界主流淘汰,但通过学习它,可以加深WebServer通信、HTTP协议的深层认识,也算有所收获。
297 0
万法归宗:CGI
|
负载均衡 Java 应用服务中间件
[CGI,Nginx,FastCGI,编程语言,服务器端]FastCGI在PHP与Nginx之间的作用介绍
  一:什么是 CGI?   服务器端编程语言如(如php/java)与Web服务器之间传递信息的协议,约定了http头、表单等信息的传递接口;   二:FastCGI 是什么?
134 0
|
PHP
【PHP系列直播】深入理解 FastCGI 协议以及在 PHP 中的实现
直播地址 https://yq.aliyun.com/live/956 直播时间 2019年4月9日 20:00 主讲人 周梦康(楚松) 点击关注专家阿里云资深研发工程师,《深入 PHP 内核》作者之一 内容提要 传统 CGI 工作原理分析客户端访问某个 URL 地址之后,通过 GET/PO...
2231 0