Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1880456
  • 博文数量: 376
  • 博客积分: 2147
  • 博客等级: 大尉
  • 技术积分: 3642
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-06 10:47
文章分类

全部博文(376)

文章存档

2019年(3)

2017年(28)

2016年(15)

2015年(17)

2014年(182)

2013年(16)

2012年(115)

我的朋友

分类: 嵌入式

2014-05-30 11:08:33

CGI是什么

         CGI全称是CommonGateway Interface,简称CGI,中文名叫做通用网关接口。

CGI程序就是符合CGI接口规范的程序,相对于WebServer来说也叫外部程序。

CGI接口规范的定义,使得WebSever具备了动态服务功能。客户端或者浏览器通过HTTP协议的GETPOST方法将将form表单数据提交给Web Sever,然后Web Sever 再将客户端的数据交给CGI程序处理,最后由CGI程序将用户数据的处理结果返回给Web SeverWeb Sever将处理结果返回给客户端。

Web Server收到客户端的数据,怎么传递给CGI程序? CGI程序处理后的结果怎么传回给Web Server?这些内容都在CGI规范里定义了。具体参考。

CGI程序

         CGI程序就是按照CGI规范,从WebServer获取客户端数据,然后进行相应处理,将处理结果返回给Web Server。因此CGI程序可以用任何编程语言实现,pythonshellCjava等等。

         linux下,CGI程序通过环境变量QUERY_STRING获取客户端数据,具有如下形式:”name1=value1&name2=value2&name3=value3”CGI程序通过标准输出(stdout)将处理结果返回给WebServer

Hello CGI

         实现一个最简单的CGI程序,不处理任何客户端数据,只简单返回类似Hello World的页面。在实现CGI程序之前,需要有一个支持CGIWeb Sever运行起来,这里使用BOA Web Sever。具体编译安装方法请参考文章《boa-0.94.13 Web服务器的编译与运行》。

BOA CGI配置

只需修改一项,具体如下:ScriptAlias/cgi-bin/ /home/hyx/BOA/cgi-bin/

所有的cgi程序需要放入/home/hyx/BOA/cgi-bin/目录。

假设BOA服务器为

Shell实现

 

[plain] view plaincopy
  1. #!/bin/sh  
  2.   
  3. echo "Content-type:text/html"  
  4.   
  5. echo ""  
  6.   
  7. echo ""  
  8.   
  9. echo"cgiShellHello"  
  10.   
  11. echo ""  
  12.   
  13. echo '

    Hello World! "CGI Shell"  

    '  
  14.   
  15. echo " "  
  16.   
  17. echo ""  

安装:cp  cgiShellHello/home/hyx/BOA/cgi-bin/

测试:浏览器访问/cgi-bin/cgiShellHello

  1. <html>  
  2.   
  3. <head><title>cgiCHello.ctitle>head>  
  4.   
  5. <body>  
  6.   
  7. <h1>Hello World! <fontcolorfontcolor="red">"CGI C"font> h1>  
  8.   
  9. body>  
  10.   
  11. html>  


C实现

  1. #include  
  2.   
  3. int main(int argc, char** argv)  
  4.   
  5. {  
  6.   
  7. printf("Content-type:text/html\n\n");  
  8.   
  9. printf("\n");  
  10.   
  11. printf("cgiCHello.c\n");  
  12.   
  13. printf("\n");  
  14.   
  15. printf("

    Hello World! \"CGI C\"  

    \n"
    );  
  16.   
  17. printf("\n");  
  18.   
  19. printf("\n");  
  20.   
  21. return 0;  
  22.   
  23. }  


编译:gcc  –o cgiCHello cgiCHello.c

安装:cp  cgiCHello/home/hyx/BOA/cgi-bin/

测试:浏览器访问/cgi-bin/cgiCHello

  1. <html>  
  2.   
  3. <head><title>cgiCHello.ctitle>head>  
  4.   
  5. <body>  
  6.   
  7. <h1>Hello World! <fontcolorfontcolor="blue">"CGI C"font> h1>  
  8.   
  9. body>  
  10.   
  11. html>  


关键点

上面C Shell编程实现的CGI程序,一方面说明了CGI程序可以有任意语言编程实现,另一方面也说明了两点:

一、Web ServerCGI程序通过标准输出交互信息,C语言的printfShellecho都是标准输出接口。

二、上述CGI程序返回的的HTML文件,但是在真正的HTML文件之前都有一句Content-type:text/htmlContent-type表明了后续的数据是什么类型,最终到达客户端浏览器时,浏览器根据此项指示决定如何处理后面的数据,如果是HTML就显示HTML页面。具体Content-type还有哪些内容,google&baidu吧。

阅读(1393) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~