通用网关接口

✍ dations ◷ 2025-02-24 20:38:49 #通用网关接口

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

相关

  • 烧猪烧猪是广东传统食品的一种。制法与另一广东烧味烧乳猪基本一样,不同的是采用已成长的猪,而非乳猪来烧烤。烧猪以肋骨部最为肥美可口。烧猪的其他多骨部分如头、肘等可以用作淆
  • 社会福利福利主义主张政府收取缴纳高额的税收,并提供高福利乃至一手承办教育、卫生之类涉及公共服务的事业。一方面,福利主义国家有明显的社会主义性质,现代的福利国家主要由中左派政党
  • 斯彼得贝格斯彼得贝格(挪威语:Spydeberg)是挪威原东福尔郡的一个市镇,2020年1月1日和其他三市镇合并成立为内东福尔(英语:Indre Østfold municipality)市镇,并隶属新成立的维肯郡。
  • I Luv It (PSY歌曲)《I Luv It》为韩国歌手PSY的一首单曲,也是他的第八张专辑《4X2=8(英语:4X2=8)》之主打单曲。此单曲在2017年5月10日经由YG娱乐发行。此单曲同时由韩国歌手Zico共同创作。此单曲
  • 2010年7月11日日食2010年7月11日日食是一次日全食,发生于2010年7月11日(东半球的部分日偏食区域为7月12日)。新月当天(即朔日),地球上观测到月球和太阳的角距离极小,此时月球如果恰好在月球交点附近,
  • 袁伟时袁伟时(1931年12月15日- ),广东兴宁人,中国历史学家,中山大学教授。研究方向为中国近代史。袁伟时1947年考进广州南海中学念高中,1950年考进中山大学经济系,至1957年在复旦大学政治
  • 李握如李握如(1908年-1995年),男,湖南平江人,中华人民共和国政治人物,曾任云南省高级人民法院院长,云南省政协副主席,第六届全国政协委员。
  • 高逊志高逊志,字士敏,萧县人,元末侨寓嘉兴。好学问,师从贡师泰、周伯琦、郑元祐,“文章典雅,成一家言”。洪武三年明太祖再次下诏重修《元史》,二月六日重开史局,以宋濂、王祎为总裁,以高逊
  • 福宁卫福宁卫是明代至清初的一处卫所。洪武二十年(1387年)置,治所在今福建省霞浦县东,属福建都指挥使司管辖,领大金千户所。清朝康熙三年(1664年)被废止。
  • 张抗美 (1952年)张抗美(1952年4月-2020年2月14日),女性,籍贯湖北武汉,1968年参加工作,2002年退休,生前在武汉市硚口区宝丰街社区卫生服务中心执业。其知名于主动报名参与了2019冠状病毒病武汉市疫情的防治工作,并在该服务中心发热诊室负责发热病人分流工作,但因此感染2019冠状病毒病去世。逝世后获得烈士、“全国卫生健康系统新冠肺炎疫情防控工作先进个人”及全国三八红旗手称号。