通用网关接口

✍ dations ◷ 2025-11-08 17:47:40 #通用网关接口

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

相关

  • 语言移转语言移转(英文:language transfer、linguistic interference)指的是说话者或写作者在使用第二语言时,也运用了他们母语知识的一种现象。标准的定义为一种语言对学习另一种语言的
  • 内维尔·张伯伦亚瑟·内维尔·张伯伦,FRS(英语:Arthur Neville Chamberlain,1869年3月18日-1940年11月9日),英国保守党政治人物,1937年5月至1940年5月担任英国首相,以其绥靖主义外交政策闻名,并于193
  • 唐人街探案2《唐人街探案2》(英语:Detective Chinatown Vol. 2),是一部于2018年上映的悬疑喜剧电影。本片是2015年电影《唐人街探案》的续集。由王宝强、刘昊然、肖央领衔主演,2018年2月16日
  • 硫化锌硫化锌(化学式:ZnS)是锌的硫化物,为白色至黄色粉末或晶体,难溶于水,主要以闪锌矿和纤锌矿的形式存在。这两种结构都为宽禁带半导体材料,在光电子器件中有广泛应用。闪锌矿结构为立
  • 字符串搜索算法字符串搜索算法(String searching algorithms)又称字符串比对算法(string matching algorithms)是一种搜索算法,是字符串算法中的一类,用以试图在一长字符串或文章中,找出其是否包
  • 清圆唇软颚近音清圆唇软颚近音(英语:voiceless labialized velar approximant)是辅音的一种,是浊圆唇软颚近音的清化音。历史上又叫做清圆唇软颚擦音。又写成或 。在美式英语中有这种辅音,很多
  • 捺钵捺钵是契丹语,汉语译为行营、行辕、行在、营盘﹐意为辽朝帝王的行营。辽朝虽以辽上京作为首都,但是其政治核心不在首都,而在捺钵(契丹语“行在所”、“行宫”的音译)。这是因为辽朝
  • 寅次郎的故事29 紫阳花之恋《寅次郎的故事29 紫阳花之恋》(日语:男はつらいよ 寅次郎あじさいの恋、英语:Hearts and Flowers for Tora-san)是一部1982年上映的日本喜剧电影,亦是《寅次郎的故事系列》的第
  • 芒苞草属芒苞草属(学名:)是石竹科下的一个属。该属仅有芒苞草()一种,分布于中国四川省。
  • 乌克兰国家颜色乌克兰的国家颜色是上蓝下金的颜色组合。乌克兰国旗也是这个颜色。乌克兰国家颜色起源于基督教时期之前,当时在传统仪式上人们大多会采用黄色和蓝色,因为这两种颜色分别代表火焰和水源。对此最为确凿的证据最早可以追溯到格伦瓦德之战时期,当时来自波兰-立陶宛联盟地区的一些民兵方阵中就曾出现过蓝黄两色。在19和20世纪的地图上,乌克兰的领土通常都被涂成黄色。而“金色”基本上是黄色色谱中的一种颜色,而且在纹章学中并无明确的“黄色”这一颜色,“黄色”和“金色”都被算作“金色”。蓝色和金色还是瑞典、帕劳和哈萨克斯坦的国家颜色。