通用网关接口

✍ dations ◷ 2025-04-26 00:19:43 #通用网关接口

在计算机领域,通用网关接口 (英语:Common Gateway Interface,CGI) 是为提供网络服务而执行控制台应用 (或称命令行界面)的程序,提供于服务器上实现动态网页的通用协议。通常情况下,一次请求对应一个CGI 脚本的执行,生成一个 HTML。

简而言之,一个 HTTP POST 请求,从客户端经由 标准输入 发送数据到一个CGI 程序。同时携带其他数据,例如 URL 路径, HTTP头字段数据,被转换为进程的环境变量。

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

Perl是一个广泛被用来编写CGI程序的语言,但CGI是独立于任何语言的。Web服务器无须对语言有任何了解。事实上,CGI程序可以用任何脚本语言或者编程语言实现,只要该语言可以在系统上运行。除Perl外,像Unix shell 脚本, Python, Ruby, PHP, Tcl, C/C++和Visual Basic都可以用来编写CGI程序。

实现维基百科编辑的CGI程序的一个例子:首先用户代理程序向这个CGI程序请求某个名称的条目,如果该条目页面存在,CGI程序就会去获取那个条目页面的原始数据,然后把它转换成HTML并把结果输出给浏览器;如果该条目页面不存在,CGI程序则会提示用户新建一个页面。所有维基操作都是通过这个CGI程序来处理的。

CGI的工作方式,从Web服务器的角度看,是在特定的位置(比如:http://www.example.com/wiki.cgi)定义了可以运行CGI程序。当收到一个匹配URL的请求,相应的程序就会被调用,并将客户端发送的数据作为输入。程序的输出会由Web服务器收集,并加上合适的档头,再发送回客户端。

一般每次的CGI请求都需要新生成一个程序的副本来运行,这样大的工作量会很快将服务器压垮,因此一些更有效的技术像mod_perl,可以让脚本解释器直接作为模块集成在Web服务器(例如:Apache)中,这样就能避免重复加载和初始化解释器。不过这只是就那些需要解释器的高级语言(即解释语言)而言的,使用诸如C一类的编译语言则可以避免这种额外负荷。由于C及其他编译语言的程序与解释语言程序相比,前者的运行速度更快、对操作系统的负荷更小,使用编译语言程序是可能达到更高执行效率的,然而因为开发效率等原因,在目前解释型语言还是最合适的。

如果代码只是偶尔改变的话,我们可以在服务器产生一个新的进程在编译代码之前进行处理。有一个例子是FastCGI,当然还包括其它编写的加速器,它会在第一次调用脚本时,在系统的某个地方保存脚本编译过的版本。这样对这个文件以后的请求就会自动转向这个编译过的代码,而不用每次调用脚本解释器来解释脚本。当更改了脚本,加速器的临时缓存会被清空来保证调用的是新的版本的脚本。

另一个方法是直接把解释器放在Web服务器中,这样就无须新建一个进程来执行脚本。Apache服务器有很多这样的模块,像mod_cplusplus (页面存档备份,存于互联网档案馆)、mod_perl、mod_php、mod_python、mod_ruby、和mod_mono。

相关

  • 国际土壤年国际土壤年,联合国第68届会议决议声明中,订定12月5日定为“国际土壤日”,并宣布2015年为“国际土壤年”(International Year of Soils)。该目的是提高认识全世界土壤粮食安全的重
  • kPa帕斯卡(符号Pa或Pascal)是国际单位制(SI)的压强单位。在不致混淆的情况下也可简称为“帕”。它等于每平方米一牛顿。以法国学者(数学家、物理学家、化学家、音乐家、宗教家、教育
  • 激情激情 (英语:Passion),源自于古希腊动词πάσχω(paskho),意思是遭受或是承受某种情绪,适用于某人或某事非常强烈的感觉。激情是种强烈的情绪,其中包括驱使自己的感觉、充满热忱或
  • 亚齐特区伊斯兰教 98.19% 新教 1.12% 佛教 0.16% 天主教会 0.07% 印度教 0.003% 亚济特区(Aceh),是在印尼苏门答腊岛北端的一个特别行政区。首府班达亚齐。1949年印尼脱离荷兰殖民独
  • 爱德华·劳里·塔特姆爱德华·劳里·塔特姆(Edward Lawrie Tatum,1909年12月14日-1975年11月5日),美国遗传学家。他与乔治·韦尔斯·比德尔发现基因受到特定化学过程的调控而获得1958年诺贝尔生理学或
  • 詹胜詹胜为中国清朝武官官员,本籍福建。行伍出身的詹胜于1802年(嘉庆7年)以本标中营游击职务奉旨接替张见陞,于台湾地区代理担任台湾水师协副将。而隶属台湾镇之下的此官职是台湾清
  • 邓冯邓冯,表字君侯,西汉南阳郡(治今河南省南阳市)人,汉平帝时右扶风、尚书令。邓冯原任尚书令,元始五年(5年),取代七十岁病免的谢尧担任右扶风,右扶风管理渭城县、咸阳县、槐里县、鄠县、
  • 明宣宗明宣宗朱瞻基(1399年3月16日-1435年1月31日),或称宣宗章皇帝,明仁宗嫡长子,永乐九年(1411年)立为皇太孙;永乐二十二年(1424年)十月立为皇太子。洪熙元年(1425年)即位,次年改元宣德,明朝第5
  • 皇家园艺学会皇家园艺学会(英语:The Royal Horticultural Society)是一个英国园艺学会。1804年创办于英国伦敦,首任会长是托马斯·安德鲁·奈特。最初名为伦敦园艺学会(Horticultural Society
  • 韩亚航空991号班机空难韩亚航空991号班机是韩国韩亚航空一趟由首尔仁川国际机场飞往上海浦东国际机场的货运航班。2011年7月28日当地时间上午4时许,即起飞后约1小时,这班由波音747-48EF货机执行的航