二、CGI设计初步
1. CGI数据传送方法
客户有两种方法:
⑴通过环境变量,采用GET方式:<form method="GBT" action="/cgi-bin/mycgi">…</form> 该法简单,但用cethod=get方式通过变量传送数据会因变量接受的数据量有限而产生数据丢失。
⑵通过标准输入,采用POST方式──建议使用方式
标准输入法是通过method=post方式把数据传送到网关程序的入口。数据在传输中是经过URL编码的,CGI程序在处理前需进行解码,由于此法对数据量没有限制,因而传输中不会产生数据丢失。
URL编码就是浏览器把表单输入的数据传送到服务器时,将输入数据编码、打包。从表单输入的变量及其数值,被编码为“参数名/参数值”,同时把那此不能直 接传输的数据转化为16进制。然后根据使用的是GET方法还是POST方法,把它作为URL的一部分或直接送到服务器。
CGI程序是一种在www服务器上运行的程序,主要用于处理用户通过表单输入的信息,在服务器上产生相应的作用,或把处理结果反馈给浏览器,CGI程序须符合以下两个条件:
⑴CGI程序的输出要写标准输出
这样,服务器才能解释这一输出,并把它返回到浏览器。
⑵CGI程序的数据头要告诉服务器如何处理该程序的输出
为了使服务器能够解释CGI程序的输出,CGI程序要有一个特殊的头作为第一个输出行,数据头可以是下列三种之一: ①数据类型(Content-type), 如:Content-type: text/html ②地址类型(Location), 如:Location://www.w3.0rg ③状态类型(Status), 如:Status:204 No Respouse
CGI程序同下列三部分构成:
⑴数据解码部分:由浏览器传送给服务器的通过表单输入的数据都是经过URL编码的,必须进行解码。如果不需要处理表单输入,该部分可省略。
⑵数据头部分:必须包含这一部分作为第一个输出行,该行后必须有一空格行。该行可以是下列三种之一:
① 数据类型(Content-type), 如:Content-type: text/html ②地址类型(Location), 如:Location:// www.w3.org ③状态类型(Status), 如:Status:204 No Respouse
⑶CGI程序主体部分:对通过表单输入的数据进行处理,并输出到标准输出。
若服务器要把数据传送给浏览器,则须在CGI程序中使用表示数据类型的头,它将告诉浏览器如何解释该输入。
例1: 如服务器要判断回一个HTML文件,则CGI程序中的类型头应定义为:Content-type:text/html 例2: 如服务器要送回的文件类型是JEPG文件,则CGI程序中的类型头应定义为:Contert-type:p_w_picpath/jpg 其余的数据以此类推。
若用户想在服务器上打开或加载一个现有的文件,则须在CGI程序中使用表示地址类型的头。表示地址类型的头的值可以是一个URL全地址,也可以是去掉http:和主机名的URL地址。
例1: Location: http://www.lne.com/index.html 例2: Location: http://www.w3.org/ 例3: Location: http://lemay/the Book/index.html
如果在传送最后服务器还要送一个特殊的状态码到浏览器,则须在CGI程序中加入表示状态类型的头。状态码由HTTP定义。
例:Status: 204 No Response 此状态码表示这时浏览器不能从服务器得到任何反馈信息,即服务器上的CGI程序只是对输入进行处理而不作应答,浏览器界面保持不变。
下面是一个检索约翰是否登录的例子:
|
转载于:https://blog.51cto.com/xiangpengmeng/249887