通用网关接口

✍ dations ◷ 2025-06-08 06:07:19 #通用网关接口

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

相关

  • 激素激素(英语:hormone)也音译作荷尔蒙或贺尔蒙,在希腊文原意为“兴奋活动”。激素是指体内的某一细胞、腺体或者器官所产生的可以影响机体内其他细胞活动的化学物质。仅需很小剂量
  • 卡介苗卡介苗(Bacillus Calmette-Guérin,简称BCG,中文名称来自于其发明者卡氏-介氏)是一种最初被用于预防结核病的疫苗。在结核病常发的国家,常推荐健康的婴儿在出生时候尽快接受一剂
  • N02CA·B·C·D·G·H·QI·J·L·M·N·P·R·S·VATC代码N02(镇痛药)是解剖学治疗学及化学分类系统的一个药物分组,这是由世界卫生组织药物统计方法整合中心(The WHO Collaboratin
  • 文化多样性文化多样性是多元文化或各种单一文化结合体的本质,与谋求全球单一文化的文化同质化相反,更类似于文化融合。文化多样性也可以指不同的文化尊重彼此的差异。一般情况下,人们认为
  • 彝语中部方言彝语中部方言,是彝语的一种方言,使用人数50万人。和傈僳语关系密切。主要分布在云南省中部。分布范围东至元谋、禄丰,与东部方言区接界;南至双柏、镇沅,与南部方言区接界;西至祥云
  • 梅乐峰梅乐峰是尼泊尔的山峰,位于该国东部MAKARU马卡鹿-国家公园境内,属于喜马拉雅山脉的一部分,海拔高度6,476米。它包含三个主要的峰顶—梅乐北峰6,476米、梅乐主峰6,461米、梅乐南
  • 蒂塔诺山蒂塔诺山(意大利语:Monte Titano)是圣马力诺的山峰,位于首都圣马力诺以东,属于亚平宁山脉的一部分,海拔高度739米,是该国最高的山峰,每年降雨量560至800毫米。
  • 尼克·卡农尼古拉斯·斯科特·“尼克”·卡农(英语:Nicholas Scott "Nick" Cannon,1980年10月8日-),是一名美国演员、说唱歌手、电视节目主持人。在电视领域,卡农少年时就在《All That》节目中出演喜剧小品,之后又相继主持了《尼克·卡农秀(英语:The Nick Cannon Show)》(The Nick Cannon Show)、《狂野与开放》(Wild 'N Out)以及《美国达人》。他出演的电影包括:《锣鼓喧天(英语:Drumline (film))》、《爱情无价(英语:L
  • 井之胁海井之胁海(日语:井之脇 海/いのわき かい ;1995年11月24日-)是日本男演员,出身自神奈川县,humanité旗下艺人。
  • 堤真一.mw-parser-output ruby>rt,.mw-parser-output ruby>rtc{font-feature-settings:"ruby"1}.mw-parser-output ruby.large{font-size:250%}.mw-parser-output ruby.larger{font-size:300%}.mw-parser-output ruby.large>rt,.mw-parser-output ruby.large>rtc{font-size:.3em}.mw