CGI(Common Gateway Interface)介绍

本文主要介绍CGI(Common Gateway Interface)的相关知识。

1 概述

CGI(Common Gateway Interface),即通用网关接口,是WWW(World Wide Web)技术中最重要的技术之一,是外部应用程序(即CGI程序)与Web服务器之间的接口标准,负责在CGI程序和Web服务器之间传递信息。

CGI是Web服务器运行时,调用外部应用程序(即CGI程序)的规范,CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的、新的交互式媒体,按照CGI编写的程序可以扩展Web服务器功能。

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

CGI应用程序能通过Web服务器与Web浏览器进行交互,还可以通过数据库API与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据,将数据格式化为HTML文档后,发送给Web浏览器,也可以将从Web浏览器获得的数据放到数据库中。CGI与这几者的关系图如下:

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

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

2 CGI程序处理步骤

CGI程序的一般处理步骤如下:

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

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

3 CGI的优缺点

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

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

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

为了解决CGI存在的上述问题,出现了CGI的升级版FastCGI,关于FastCGI的相关内容,请参考此文

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liitdar

赠人玫瑰,手有余香,君与吾共勉

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值