我理解的CGI

之前看了很多关于CGI的解释,但还是对这个概念很模糊,今天看到了一篇博客,觉得自己好像懂了一些,来总结一下。
定义:
CGI(Common Gateway Interface)是Web 服务器运行时外部程序的规范,按CGI 编写的程序可以扩展服务器功能。CGI 应用程序能与浏览器进行交互,还可通过数据API与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据。格式化为HTML文档后,发送给浏览器,也可以将从浏览器获得的数据放到数据库中。

我的理解
我当时看完这个解释之后依旧感到很迷茫,我们向浏览器发送一个请求之后,比如我们在地址栏输入一个URL,它从DNS得到IP之后,经过层层传输到达了服务器,服务器通过解析HTTP,把你要的请求资源给你。好像没有什么地方需要CGI?但仔细一想,我们从HTTP拿出来的请求是怎么被处理的呢?其实CGI就是处理这个请求的程序。

web服务器解析了HTTP请求之后,会将这个请求的各种参数写进环境变量,比如REQUEST_METHOD,PATH_INFO之类的,之后呢,服务器会调用相应的程序进行处理(这个程序就是CGI),它会生成对应的内容,然后返回给服务器,再由服务器转交给客户端。

那CGI是怎么实现的呢?
理论上,可以用任何语言来写CGI。我们只需要读取到存储请求的CGI,然后做处理,用标准输出将处理后的内容输出。这里的输出被重定向到客户浏览器。这样,如果编写一个C的CGI程序的时候,把一个HTML文档输出到它的 stdout上,这个HTML文档会被在客户端的浏览器中显示出来。这也是CGI程序的一个基本原理。

举个例子:
这是一个计算乘法的表单

< FORM ACTION="/cgi-bin/mult.cgi" >

< P >请在下面填入乘数和被乘数,按下确定后可以看到结果。

< INPUT NAME="m" SIZE="5" >

< INPUT NAME="n" SIZE="5" >< BR >

< INPUT TYPE="SUBMIT" VALUE="确定" >

< /FORM >

下面就是处理这个表单的CGI程序,对应于FORM标签中的ACTION属性值。

#include < stdio.h >
#include < stdlib.h >

int main(void)
{

    char *data;
    long m,n;

    printf("%s%c%c ","Content-Type:text/html;charset=gb2312", 13, 10);
    printf("<TITLE>乘法结果</TITLE>");

    printf("<H3>乘法结果</H3>");

    data = getenv("QUERY_STRING");

    if(data == NULL)
    printf("<P>错误!数据没有被输入或者数据传输有问题");
    else if(sscanf(data, "m = %ld & n = %ld", &m, &n) != 2)
    printf("<P>错误!输入数据非法。表单中输入的必须是数字。");
    else
    printf("<P>%ld和%ld的成绩是:%ld。", m, n, m * n);

    return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值