通用网关接口

✍ dations ◷ 2025-12-03 13:36:48 #通用网关接口

在计算机领域,通用网关接口 (英语: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。

相关

  • 地域分配联合国区域集团,或称联合国地区组,是对联合国会员国的一种非官方划分标准,根据地缘政治将会员国划分成五个地区组。这是一种联合国职位分配的非正式方式。在联合国框架下的不同
  • 东昌里西海卫星发射基地(西海卫星发射场),又叫东仓里发射场,是位于朝鲜平安北道铁山郡的火箭发射场。在2012年4月13日,为庆祝金日成诞晨100周年朝鲜发射光明星3号但失败了,但在同年12月1
  • 弗莱奇峰坐标:46°10′4″N 8°0′11″E / 46.16778°N 8.00306°E / 46.16778; 8.00306弗莱奇峰(Fletschhorn),是瑞士的山峰,位于该国南部,由瓦莱州负责管辖,属于本宁阿尔卑斯山脉的一部分
  • 亚尼斯·季马亚尼斯·季马(拉脱维亚语:Jānis Timma,1992年7月2日-),拉脱维亚篮球运动员。他现在效力于俄罗斯球队圣彼得堡泽尼特篮球俱乐部。他曾经参加2013年NBA选秀。他也代表拉脱维亚国家
  • 东门礁东门礁(英语:Hughes Reef;越南语:đá Tư Nghĩa/.mw-parser-output .han-nom{font-family:"Nom Na Tong","Han-Nom Gothic","Han-Nom Ming","HAN NOM A","HAN NOM B","Ming-Lt-
  • 莎伊丝塔·苏拉瓦底·伊金穆拉别姬莎伊丝塔·苏拉瓦底·伊金穆拉(乌尔都语:شائستہ اکرام‎‎;英语:Begum Shaista Suhrawardy Ikramullah,1912年7月22日-2000年12月11日)是巴基斯坦政治家、外交官、
  • 包世臣包世臣(1775年-1855年),清朝文学家,字慎伯,晚号倦翁,安徽泾县人。包世臣自幼家贫,但勤于词章,并喜谈国事。嘉庆十三年(1808年)中举,但多次考进士不中。此后曾先后为陶澍、裕谦、杨芳幕客
  • 年轻人们《年轻人们》(日语:若者たち,英语:),为1966年由富士电视台所播出的电视连续剧。1967年亦衍伸出电影版、1969年及1990年的舞台剧、2014年的电视剧翻拍版。双亲皆去世的5兄弟,在友情
  • 前35世纪前3500年至前3401年的这一段期间被称为前35世纪。
  • 佩图拉·克拉克佩图拉·克拉克,CBE(英语:Petula Clark,1932年11月15日-)是英国歌手、演员、作曲家,其职业生涯长达70多个年头。克拉克的职业生涯始于二战期间,那时她在英国广播公司电台里作艺人。1950年代,她开始用法语演唱,并以《The Little Shoemaker》、《With All My Heart》、《Prends Mon Cœur》在法语圈、英文圈获得了国际上的成功。1960年代,她开始在全球走红,并被称为“英国入侵第一女士”(the First Lady of the Britis