WEB那点事 -- (一)CGI 是什么玩意

来源:互联网 发布:ps淘宝详情页尺寸 编辑:程序博客网 时间:2024/05/02 01:27

入行五六年了,很少提笔写整块的博客,近来越发感觉到了一定的阶段,需要去整理一些文字已慰自己逝去的青春。

WEB,不就是那点事吗?

相信很多同学都知道,Apache、Tomacat,IIS等web服务器在运行的时候,会调用PHP,Java、.Net 等应用程序服务来执行具体的对数据库的相关操作。

那么他们直接具体是什么关系呢?

又跟CGI有什么关系呢?

================================================================================

先来看看CGI是什么玩意。

Common Gateway Interface,简称CGI。在物理上是一段程序,运行在服务器上,提供同客户端HTML页面的接口。这样说大概还不好理解。那么我们看一个实际例子:现在的个人主页上大部分都有一个留言本。留言本的工作是这样的:先由用户在客户端输入一些信息,如评论之类的东西。接着用户按一下“发布或提交”(到目前为止工作都在客户端),浏览器把这些信息传送到服务器的CGI目录下特定的CGI程序中,于是CGI程序在服务器上按照预定的方法进行处理。在本例中就是把用户提交的信息存入指定的文件中。然后CGI程序给客户端发送一个信息,表示请求的任务已经结束。此时用户在浏览器里将看到“留言结束”的字样。整个过程结束。



CGI:通用网关接口(Common Gateway Interface)是一个Web服务器主机提供信息服务的标准接口。

通过CGI接口,Web服务器就能够获取客户端提交的信息,转交给服务器端的CGI程序进行处理,最后返回结果给客户端。

组成CGI通信系统的是两部分:一部分是html页面,就是在用户端浏览器上显示的页面。另一部分则是运行在服务器上的Cgi程序。

它们之间的通讯方式如下图:


那么这里的CGI程序是个什么概念呢?

CGI程序就是真正的被服务器(如Apache)调用的来处理用户发送过来的数据的程序。所谓CGI程序就是按照CGI接口规范编写的能够处理用户通过浏览器发送到服务器的数据的

一个程序。

首先,这个程序必须要按照CGI接口规范来写。

前面已经说过了,CGI的学名就是通用网关接口,我们知道网关的概念是联通一个网络和另一个网络的通道,那么这里我个人的理解就

是CGI这个网关,是连通web服务器这个大容器和服务器上其它资源(如:数据库、文件)的一个通道。为什么需要网关进行连接呢,我们知道根据web服务器的设计规范来说,

web服务器只能操作它根目录下的相关文件(如:Apache服务器默认只能操作/htdocs 这个目录下的文件)。那么对于web服务器以外的资源,如果服务器想要操作怎么办呢?

就需要用到CGI这个接口,这个接口定义了web服务器在操作其权限范围以外的资源时需要遵循的规范及数据传递的方式。

有了上面这个理解,我们知道,CGI其实是一个接口规范,并且按照CGI接口规范开发的程序都可以叫做CGI程序。那么可以用来开发CGI的程序有哪些呢?C、Java、PHP、

Perl、Asp、.Net等。

用Perl编写的CGI程序后缀为:.pl;Python编写的CGI程序后缀为:.py;而C编写的CGI程序后缀为:.cgi,如果在win下编译出来的是.exe,最好将它重命名为.cgi。

这些都是为了HTTP服务能够识别并调用它们。


其实最早的时候CGI程序是用C语言来编写的,有兴趣的同学可以参考这篇文章,很不错http://blog.csdn.net/clearver/article/details/5209332。

后来随着互联网的发展,逐步又有了丰富多彩的各种新的开发语言。

那么我们从浏览器点击一个按钮向服务器发起请求这个过程是怎么来处理的呢?

回想一下,我们在表单中有一个叫做Action的属性,<Form action="xxx">,首先这个请求会被发送到web服务器,然后web服务器根据你发过来URL请求找到相对应的CGI程

序(如:login.php)。然后web服务器会把数据按照CGI的接口标准传递给相应的CGI程序,对应的CGI程序处理过请求后,会返回数据,或者文件(一般是HTMl)给服务器,服务

器会把结果返回给浏览器,浏览器负责呈现用户请求的处理结果。

这样一个请求就算完成了,其实这个过程和我理解的web请求过程没有太大的区别,只是这里我在阐述CGI这个概念。

如果有兴趣,可以用C来实现一个CGI程序。

原创粉丝点击