通用网关接口

✍ dations ◷ 2025-01-12 05:00: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。

相关

  • AAU美洲大学协会(又称美国大学协会,英语:Association of American Universities,缩写:AAU)是由美国和加拿大65所顶尖的研究型大学所组成的一个教学和研究组织。 它的主要宗旨是致力于
  • 劳氏鳄目劳氏鳄类(学名:Rauisuchia)是对一群所知有限的主龙类集合群的非正式总称,是生存于三叠纪的掠食动物,大多数体型很大,全长通常有4至6米。原先劳氏鳄类被认为与引鳄科有接近亲缘关系
  • 欧拉方程 (刚体运动)在物理学上,欧拉方程统治刚体的转动。我们可以选取相对于惯量的主轴坐标为体坐标轴系。这使得计算得以简化,因为我们现在可以将角动量的变化分成分别描述
  • 斐迪南一世 (保加利亚)斐迪南一世(Фердинанд I,1861年2月26日-1948年9月10日),全名斐迪南·马克西米利安·卡尔·利奥波德·马利·萨克森-科堡-哥达斯基(Фердинанд Максимил
  • 中华人民共和国出版轻小说列表中国大陆出版轻小说列表,整理了在中国大陆所首发发行出版且非代理的轻小说以及其最新出版进度。因角川华文轻小说暨插画大赏获奖作品为两岸同时签约,故认定为非代理作品。合作
  • 维克托·彼得罗维奇·尼科诺夫维克托·彼得罗维奇·尼科诺夫(俄语:Виктор Петрович Никонов,1929年2月28日-1993年9月17日)苏联党和国家领导人。1929年,生于罗斯托夫州绍洛霍夫斯基区别洛
  • 秬黍秬(注音:ㄐㄩˋ,拼音:jù )黍,又称黑黍,是黍的一种。中国古代的度量衡以产于羊头山附近(今山西省长治市)所产的,中等大小的秬黍的种子为基准单位。唐代规定“凡权衡度量之制:度,以
  • 乔万尼·帕伊谢洛乔万尼·帕伊谢洛(意大利语:Giovanni Paisiello,1740年5月9日-1816年6月5日),意大利作曲家。早年显示出歌唱天赋后被送进那不勒斯音乐学院学习,1764年写出第一部喜歌剧,获得成功,逐渐
  • 丰达山坐标:76°59′S 145°15′W / 76.983°S 145.250°W / -76.983; -145.250丰达山(英语:Mount Fonda)是南极洲的山峰,位于玛丽伯德地,处于格里格尔峰以南11公里,属于福特山脉中史旺森
  • 克里斯蒂安·布罗基 克里斯蒂安·布罗基(Cristian Brocchi,1976年1月30日-)是一名已退役意大利足球运动员,司职中场。曾担任AC米兰主教练,现任蒙扎主帅。这名球员出身于AC米兰青年军,被租借至多家球队,曾转投过一些俱乐部,包括国际米兰。2001年他重返AC米兰。他在俱乐部中主要是替补角色,代替属必然首发的国脚级球员加图索和皮尔洛。但他每次上场均有出色表现,平均得分较高。在场上作风顽强,风格朴实。2008年夏天,布罗基以200万欧元的身价永久转会拉齐奥2006年赛季他获选入意大利国家队一次。