CGI和FastCGI

5 篇文章 0 订阅
3 篇文章 0 订阅

1 CGI简介

  • CGI,通用网关接口(Common Gateway Interface)是一个Web服务器主机提供信息服务的标准接口。通过CGI接口,Web服务器就能够获取客户端提交的信息,转交给服务器端的CGI程序进行处理,最后返回结果给客户端。
  • 归根结底 CGI就是一个接口协议。协议就是大家公认的一套标准(叫CGI标准也可以),比如网络协议。大家都遵守一套标准,就减少了沟通的难度。
  • 进行CGI开发,就是编写一个CGI可执行程序。其实各种语言都可以编写CGI,不但Java、Python、PHP、C#等可以,Shell、C和C++也可以。由于早期CGI很多是由Perl(脚本语言)开发的,所以CGI程序也称CGI脚本,其实这个称呼不一定准确。因为C++编译出的可执行文件同样可以是CGI。

2 CGI架构图

CGI架构图

3 CGI环境变量

对于CGI程序来说,它继承了系统的环境变量。CGI环境变量在CGI程序启动时初始化,结束时销毁。当一个CGI程序不是被HTTP服务器调用时,它的环境变量几乎是系统环境变量的复制。当这个CGI程序被HTTP服务器调用时,它的环境变量就会多了以下关于HTTP服务器、客户端、CGI传输过程等项目。

3.1 与请求相关的环境变量

环境变量描述
REQUEST_METHOD服务器与CGI程序之间的信息传输方式
QUERY_STRING采用GET时所传输的信息
CONTENT_LENGTHSTDIO中的有效信息长度
CONTENT_TYPE指示所传来的信息的MIME类型
CONTENT_FILE使用Windows HTTPd/WinCGI标准时,用来传送数据的文件名
PATH_INFO路径信息
PATH_TRANSLATEDCGI程序的完整路径名
SCRIPT_NAME所调用的CGI程序的名字

3.2 与服务器相关的环境变量

环境变量描述
GATEWAY_INTERFACE服务器所实现的CGI版本
SERVER_NAME服务器的IP或名字
SERVER_PORT主机的端口号
SERVER_SOFTWARE调用CGI程序的HTTP服务器的名称和版本号

3.3 与客户端相关的环境变量

环境变量描述
REMOTE_ADDR客户机的主机名
REMOTE_HOST客户机的IP地址
ACCEPT列出能被此请求接收的应答方式
ACCEPT_ENCODING列出客户机支持的编码方式
ACCEPT_LANGUAGE表明客户机可接受语言的ISO代码
AUTHORIZATION表明被证实了的用户
FORM列出客户机的email地址
IF_MODIFIED_SINCE当用GET方式请求并且只有当文档比指定日期更早时才返回数据
USER_AGENT客户端浏览器的信息

4 Web服务器与CGI程序交互

4.1 CGI结构示意图

CGI结构示意图

浏览器通过HTTP协议发送请求给Web服务器后,Web服务器执行CGI程序,CGI程序可以通过标准输入(STDIN)或者环境变量从服务器端获取数据,执行完毕后,通过标准输出(STDOUT)将结果返回给服务器端,最后Web服务器通过HTTP协议将结果返回给浏览器。

4.2 CGI处理流程

CGI处理流程

CGI是属于fork-and-execute模式,即每次客户端有新的请求,都会创建一个子进程去执行CGI,执行完毕并将数据返回给服务器后,进程退出。这样,在面对大量请求的时候,进程的大量建立和消亡会使操作系统的性能大幅度下降。此外,由于地址空间无法共享,也限制了资源重用。

5 FastCGI简介

上面也提到,在访问量增大的情况下,CGI有着明显的缺陷,于是就有了FastCGI。FastCGI类似于一个常驻的CGI,它在激活后,不需要每次都花费时间去fork一次,可以一直执行着。感觉上类似于JSP的Servlet。

6 FastCGI扩展的环境变量

环境变量描述
FCGI_ROLE当前FastCGI程序担当的角色,如RESPONDER, AUTHORIZER, FILTER
FCGI_DATA_LENGTH服务器发送的数据长度,仅当FCGI_ROLE为FILTER时有效
FILE_LAST_MOD输入文件的最后修改时间,其值为自1970年1月1日零时零分零秒至今的秒数,仅当FCGI_ROLE为FILTER时有效

7 FastCGI处理流程

FastCGI处理流程

FastCGI在启动的时候可以启动多个CGI解析器,在收到请求之后,找到空闲的CGI解析器进行逻辑处理,并输出结果,随后再次进入空闲状态。由于 FastCGI 程序并不需要不断的产生新进程,可以大大降低服务器的压力并且产生较高的应用效率。它的速度效率最少要比CGI 技术提高 5 倍以上。它还支持分布式的部署, 即 FastCGI 程序可以在Web 服务器以外的主机上执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值