通用网关接口

✍ dations ◷ 2025-12-10 02:59:08 #通用网关接口

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

相关

  • 尼波斯科尔奈利乌斯·奈波斯(拉丁语:Cornelius Nepos,约100 BC-约25 BC,或译康涅利乌斯·尼波斯)是古罗马的传记作家。出生于山南高卢的小镇荷斯提利亚(Hostilia,今奥斯蒂利亚)。对其高卢血
  • MIT Press麻省理工学院出版社 是一个大学出版社 隶属于 马萨诸塞技术学院 (MIT), 位于 剑桥,马萨诸塞 (美国)。麻省理工学院出版社的历史可以追溯到1926年,当时麻省理工学院以自己的名
  • 自强里 (台南市东区)自强里位在由台南市东区中华东路二段133巷、富农街一段、东成街与中华东路二段围成的区域之中,东邻复兴里与虎尾里,南临和平里,西邻富强里,北邻东圣里。此区原为虎尾里的一部分,
  • 巴哈雷斯坦巴哈雷斯坦是伊朗的城市,位于该国中部,由伊斯法罕省负责管辖,距离首府伊斯法罕20公里,该市始建于1989年以纾缓首府人口过多的问题,海拔高度1,605米,2006年人口45,538。
  • 野良犬 (1949年电影)《野良犬》(日语:のらいぬ)乃日本知名导演黑泽明在1949年执导的电影,1973年重新发行重制版本。2013年朝日电视台为了开台55周年纪念,重新拍摄成电视剧。本片的背景发生在战后的日
  • 村濑迪与村濑迪与(2月28日-)是日本的女性演员、声优,岐阜县出身。Mausu Promotion所属。本名相同。2006年进入THEATRE ACADEMY。2014年加入Mausu Promotion。有一把独特尖锐的高音,出演的
  • 微分几何中的拉普拉斯算子微分几何中,有多个二阶线性椭圆型微分算子称为拉普拉斯算子(Laplace operator 或 Laplacian)。本文给出它们的一个概览。联络拉普拉斯算子(connection Laplacian)是作用在流形上
  • 拉瓦尔萨尔拉瓦尔萨尔(Rawalsar),是印度喜马偕尔邦Mandi县的一个城镇。总人口1369(2001年)。该地2001年总人口1369人,其中男性737人,女性632人;0—6岁人口164人,其中男96人,女68人;识字率75.60%,其
  • 后马克思主义后马克思主义(英语:Post-Marxism)是在20世纪70年代兴起于西方的政治理论,在批判传统马克思主义的基础上重新建构的政治理论。代表人物厄尼斯特·拉克劳和尚塔尔·墨菲。
  • 舒尔特·阿尔斯舒尔特·阿尔斯(荷兰语:Sjoerd Ars,1984年4月15日-),是一名荷兰职业足球运动员,司职前锋。现在效力于土耳其足球甲级联赛球队卡尔西亚卡。阿尔斯在DVC'26接受专业足球训练,之后被荷