通用网关接口(摘录)


维基百科,自由的百科全书

通用网关接口Common Gateway Interface/CGI)是一种重要的互联网技术,可以让一个客户端,从网页浏览器向执行在 Web 服务器 上的程序,请求数据。CGI 描述了客户端和这个程序之间传输数据的一种标准。

最初,CGI 是在 1993 年由美国国家超级电脑应用中心NCSA)为 NCSA HTTPd web 服务器开发的。这个 Web 服务器使用了 UNIX shell 环境变量 来保存从 Web 服务器传递出去的参数,然后生成一个运行 CGI 的独立的进程

编程语言 Perl 是一个广泛被用来编写 CGI 程式的语言,但 CGI 的一个目的是要独立于任何语言的。Web 服务器无须在这个问题上对语言有任何了解。 事实上,CGI 程序可以用任何脚本语言或者是完全独立编程语言实现,只要这个语言可以在这个系统上运行。 除 Perl 外,像 Unix shell script, PythonRubyPHPTclC/C++, 和Visual Basic 都可以用来编写 CGI 程序。

实现 Wikipedia 的 CGI 程序的一个例子:首先用户代理程序向这个 CGI 程序请求某个名称的条目,如果该条目页面存在,CGI 程序就会去获取那个条目页面的原始数据,然后把它转换成 HTML 并把结果输出给浏览器;如果该条目页面不存在,CGI 程序则会提示用户新建一个页面。所有的 Wikipedia 操作都是通过这个 CGI 程序来处理的。

CGI 的工作方式,从 Web 服务器的角度看,是在特定的位置(比如:http://www.example.com/wiki.cgi)定义了可以运行 CGI 程序。当收到一个匹配URL的请求,相应的程序就会被调用,并将客户端发送的数据作为输入。程序的输出会由 Web 服务器收集,并加上合适的档头,再发送回客户端。

一般每次的 CGI 请求都需要新生成一个程序的副本来运行,这样大的工作量会很快将服务器压垮,因此一些更有效的技术像 mod_perl,可以让脚本解释器直接作为模块集成在 Web 服务器(例如:Apache)中,这样就能避免重复载入和初始化解释器。不过这只是就那些需要解释器的高级语言(即解释语言)而言的,使用诸如 C 一类的编译语言则可以避免这种额外负荷。由于 C 及其他编译语言的程序与解释语言程序相比,前者的运行速度更快、对操作系统的负荷更小,使用编译语言程序是可能达到更高执行效率的,然而因为开发效率等原因,在目前解释性语言还是最合适的。

[编辑]Workarounds

如果代码只是偶尔改变的话, 我们可以在服务器产生一个新的进程来编译代码之前进行一下处理。有一个例子是 FastCGI,当然还包括其它编写的加速器,它会第一次调用脚本时, 就在系统的某个地方保存脚本编译过的版本,这样对这个文件以后的请求就会自动转向这个编译过的代码而不用每次调用脚本解释器来解释脚本。当更改了脚本,加速器的临时缓存会被清空来保证调用的是新的版本的脚本。

另一个方法是直接把解释器放在 Web 服务器中,这样就无须新建一个进程来执行脚本。Apache 服务器有很多这样的模块,像mod_perlmod_phpmod_pythonmod_ruby、和 mod_mono

[编辑]参见

[编辑]外部链接


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值