技术储备(一):CGI介绍

通用网关接口(CGI,Common Gateway Interface)是一种Web服务器和服务器端编程进行交互的方式。CGI完全独立于编程语言,操作系统和Web服务器。目前,它是最常见的服务器端编程技术,几乎每一个Web服务器都支持。此外,所有服务器用几乎同样的方式实现它,这样你可以为一个服务器编写CGI脚本,然后分发到任何Web服务器上运行。

就像上面说的,服务器需要一种方法来知道哪些URL映射到脚本而其中另一些URL只映射到普通的HTML文件。对于CGI通常是通过在服务器上创建CGI目录。具体做是在服务器进行设置,并告诉服务器,当请求一个特定的顶层目录下的文件时就执行这些CGI脚本(位于磁盘上的某个地方)。(缺省目录通常是/ cgi-bin/,所以一看就知道,像这样的URL:http://www.varsity.edu/cgi-bin/search指向一个CGI脚本,需要注意的是可以任意设定该目录。)有些服务器也可以设置为不使用CGI目录,而要求所有的CGI程序都用已.cgi结尾的文件名。

CGI程序只是普通的可执行程序(或解释性程序,比如Perl或Python,只要服务器知道如何启动程序),因此你可以使用几乎任何你想要的编程语言。在CGI程序被Web服务器启动之前,web服务器定义了一些包含从请求中接收到的信息的变量。这方面的例子有客户端的IP地址,请求头等,如果请求的URL中包含一个问号(?),那么问号之后的一切都会设置成变量。

这意味着,关于请求的额外信息可以被放入该URL的链接。这是像点击计数器用来判断是哪些项目被点击的常用方法之一。因此,用户可以在他/她的页面插入一个图像,并具有SRC属性是一个链接到这样的CGI脚本:SRC =http://stats.vendor.com/cgi-bin/counter.pl?username 。那么脚本就可以知道哪些用户被击中,增量和显示正确的计数。

CGI输出其返回(HTTP头和HTML文档)到服务器的方式是非常简单的:它把它写到标准输出。换句话说,在一个Perl或Python的脚本中,你只需要使用print语句。在C语言中使用printf或者一些等效的函数(C++使用cout«),而Java将使用System.out.println。

参考链接:http://haiyangxu.github.io/posts/2014/2014-05-11-How_web_works_HTTP_and_CGI.html#title26

你可能感兴趣的:(Web应用开发,轻量级httpd服务器源码解读)