Chinaunix首页 | 论坛 | 博客
  • 博客访问: 180410
  • 博文数量: 38
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 346
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-04 00:06
文章分类

全部博文(38)

文章存档

2016年(3)

2015年(15)

2014年(16)

2013年(4)

我的朋友

分类: LINUX

2014-04-02 17:09:36

CGI通用网关接口

1.CGI简介 

     CGI即为通用网关接口(Common Gateway Interface),它是一段程序,运行在服务器上,提供同客户端HTML页面的接口,通俗的讲CGI就像是一座桥,把网页和WEB服务器中的执行程序连接起来,它把HTML接收的指令传递给服务器,再把服务器执行的结果返还给HTML页;用CGI可以实现处理表格数据库查询,发送电子邮件等许多操作,最常见的CGI程序就是计数器。CGI使网页变得不是静态的,而是交互式的。

2.CGI应用程序工作原理

1.浏览器通过HTML表单或者超链接请求连上一个CGI应用程序的URL。

2.服务器接收到请求。

3.服务器执行指定CGI应用程序。

4.CGI应用程序执行所需要的操作,通常是基于浏览器者的输入的内容。

5.CGI应用程序把结果格式化为网络服务器和浏览器能够理解的文档(通常是HTML网页)。

6.网络服务器把结果返回到浏览器中。

3. CGI依赖的服务器BOA

我们项目用到服务器Boa,它是一个非常小巧的服务器,执行代码大约60KB左右它是一个单任务的Web服务器,只能一次完成用户的请求,而不会fork出新的进程来处理并发的链接请求. 但是Boa支持Cgi,能够为Cgi程序fork出一个进程来执行相应的客户请求

 CGI程序使网页不再是静态的,而是具有交互功能。我们将做好的cgi程序放在BOA服务器www/cgi-bin里面,cgi程序不能跳出www文件夹取其他文件夹的资源 

  在Boa服务器下以超文本和超媒体为技术,采用HTML、DIV+CSS等语言来写好所需要的网页,包括文字、图像、音乐等,然后客户端可以通过浏览器进行解析,从而浏览网页的各种内容  我们项目做好的网页放在boa服务器的WWW文件里, 客户端浏览器对哪个网页有请求服务器就把页面发送给浏览器

4. CGI程序与服务器BOA的交互原理

服务器和客户端之间的通信,是客户端的浏览器和服务器端的http服务器之间的HTTP通信,我们只需要知道浏览器请求执行服务器上哪个CGI程序就可以了,其他不必深究细节,因为这些过程不需要程序员去操作。

服务器和CGI程序之间的通讯才是我们关注的。一般情况下,服务器和CGI程序之间是通过标准输入输出来进行数据传递的,而这个过程需要环境变量的协作方可实现。

(1)服务器将URL指向一个应用程序(这个应用程序即Cgi程序 *.cgi)

(2)服务器为应用程序执行做准备

(3)应用程序执行,读取标准输入和有关环境变量

(4)应用程序进行标准输出

更通俗点讲,网页里面有个变量(环境变量),变量里面有个值, 通过某种方式把这个值传到cgi程序中, cgi程序中提取这个变量的值,根据这个值做出相应的处理;

 在HTML中,当客户填写了表单,并按下了发送(submit)按钮后,表单的内容被发送到了服务器端,一般的,这时就需要有一个服务器端脚本来对表单的内容进行一些处理,或者是把它们保存起来,或者是按内容进行一些查询,或者是一些别的什么。没有了CGI,WEB的世界就完全失去了它的交互性,所有的信息都变成单向的了,而不能够有任何的反馈。

 

     下图很好的展示了CGI程序的作用,CGI程序一方面将主进程执行的数据信息反馈到服务器送到浏览器上,同时HTML上的请求到达服务器后,CGI程序可以将请求解析到主程序中或者数据库中。

 

         

 

5.数据提交方式

在项目中我们大多以表单的形式提交数据信息,表单是html中的一个标签,也可以说是一个小组件。

表单有属于它自己的表单元素, 有输入框(单行/多行),单选按钮,多选按钮,下拉选项等,这些叫表单项. 这些东西只要打开dreamweaver随便建个html就可以看到它的表单元素当你打开一个网页的时候,你输入的文字或者做出的选择,类似等等要提交信息的地方基本上都是属于表单元素这些表单元素(表单项)都必须放在表单内而整个表单在网页是看不到的,你可以理解它为一个容器,里面装着你要发给服务器的东西

表单的提交过程,这是html中的一个代码段:

 method="数据提交方式分 get 和 post ">

这里是表单内容
这里面的表单数据会被提交到指定URL(这个url可以是服务器上的一个cgi程序)
//type="submit" 是指提交表单

 4、数据提交接受方式Get 和 post

 上面那个代码段中 method中的get和post就是提交表单的两种方式;

两种表单提交方式之间的区别:

get方式:以URL字串本身传递数据参数,在服务器端可以从'QUERY_STRING'这个变量中直接读取,效率较高,但缺乏安全性,也无法来处理复杂的数据(只能是字符串,比如在servlet/jsp中就无法处理发挥java的比如vector之类的功能); 
post方式:就传输方式讲参数会被打包在数据报中传输,从CONTENT_LENGTH这个环境变量中读取,便于传送较大一些的数据,同时因为不暴露数据在浏览器的地址栏中,安全性相对较高,但这样的处理效率会受到影响。 

表单我们知道怎么提交了,那怎么提取表单中的数据呢?

比如下面这个表单:



    
    
    

当out.cgi收到请求时,需要把输入框”name”和输入框”number”内的值提取出来。而且不管form中的action是GET还是POST,都要有效。

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