分享
 
 
 

CGI教程(10)CGI规范

王朝other·作者佚名  2008-05-18
窄屏简体版  字體: |||超大  

CGI 规范

本节教程是CGI/1.1的规范,更高版本的协议是向下兼容的,也就是说CGI/1.1的规范同样使用于更高版本的规范。

服务器于CGI脚本有四种主要的方法进行通讯:环境变量、命令行、标准输入和标准输出。

CGI环境变量的规范

为了传递关于从服务器到脚本的信息请求的数据,服务器使用了命令行参数比如环境变量。这些变量是在当服务器执行网关程序时被设置的。

下面的环境变量不是特殊请求而是为请求的设置

SERVER_SOFTWARE :相应请求的信息服务软件的名字和版本,其格式为name/version ;

SERVER_NAME :服务器的主机名或者IP地址。

GATEWAY_INTERFACE :服务器遵从的CGI规范的修订版。格式为:CGI/revision

CGI 规范

以下的环境变量是由网关程序实行的请求规范:

SERVER_PROTOCOL :信息协议的名字和修订版。格式为protocol/revision 。

SERVER_PORT :发送请求的端口号。

REQUEST_METHOD :请求的方法。对于HTTP,有"GET"、 "HEAD"、 "POST"等等。

PATH_INFO :额外的路径信息,由客户端给出的。换句话说,脚本可以由他们的虚拟路径名来访问,在这个路径的末尾附带额外的信息。这个额外信息被作为PAHT_INFO发送。这个信息如果在传递给CGI脚本之前来自URL就可以由服务器来解码。

PATH_TRANSLATED :服务器提供了一个PAHT_INFO的转换版本,它需要路径并且为它做虚拟到物理的映射。

SCRIPT_NAME :将要执行的脚本的一个虚拟路径。

QUERY_STRING :在引用脚本的URL中紧跟在?之后的信息。这是一个查询信息。它不能以任何方式来解码。这个变量总是可以在有查询信息的时候被设置,而不管命令行解码。

REMOTE_HOST :产生请求的主机名。如果服务器没有这个信息,它应该设置REMOTE_ADDR 并且让这个为未设置状态。

REMOTE_ADDR :产生请求的远程主机的IP地址。

AUTH_TYPE :如果服务器支持用户验证,脚本就受保护。这是一个协议规范授权方法,用于验证用户。

REMOTE_USER :如果服务器支持用户验证,脚本就受保护。这是他们授权的用户名。

REMOTE_IDENT :如果HTTP服务器支持RFC931认证,这个变量将被设置为从服务器取出的远程用户名。这个变量的用法应该只限制在登陆的时候。

CONTENT_TYPE :对于哪些已经附上信息的请求,比如 HTTP POST和PUT,这是数据的内容类型。

CONTENT_LENGTH :客户端给的数据内容的长度。

另外,来自客户端的文件头的几行被放置到环境中,它是前HTTP紧跟着文件头名字。头名字中的任何字符在前面都被加上了_字符。服务器可能会排除任何的已经被它处理的文件头,比如授权、内容类型和内容长度等等。如果需要的话,如果文件头的长度超过了系统环境的藓,服务器可以选择用来排除他们。

CGI 规范

CGI命令行选项规范

命令行只用在ISINDEX查询的情况。它不使用在HTML表单或者任何没定义的查询类型中。服务器应该为一个没有编码的=字符搜索信息来决定是否命令行被使用了,如果它发现了,命令行就不使用。这个就委托客户端在ISINDEX查询中编码等于号,这个被认为是安全的。

下面举个例子,使用网络命令和ISINDEX界面来观察"httpd"。你将会看到脚本会自动利用/cgi-bin/finger?httpd来调用它本身并且将会在命令行执行"finger httpd" ,还会为你输出结果。

如果服务器没有在QUERY_STRING找到"=" ,那么命令行不会被使用,任何的解码也没有被执行。这个查询利用适当的FORM提交解码器来维持于处理的联系。同时,作为一个例子,可以为提交 "httpd=name"使用超级连接到网络指令脚本。因为QUERY_STRING包含了一个未编码的"=",所以没有被解码,这个脚本不知道它提交了一个有效的查询,而只是给你一个缺省的网络指令表单。

如果服务器发现它因为内部限制(比如exec()或者/bin/sh命令行限制)儿不能发送字符串,服务器应该包含NO命令行信息并且提供没有解码的查询信息在环境变量QUERY_STRING中。

CGI 规范

CGI脚本输入规范

为了请求哪个有信息附在文件头后面,比如HTTP POST或者PUT,信息将被发送到脚本的stdin中。

服务器将要发送CONTENT_LENGTH 字节到这个文件描述器中。这里记住它还会给出数据的CONTENT_TYPE。服务器有义务在脚本读了CONTENT_LENGTH的字节之后发送文件的结束标识。

CGI 脚本输出规范

脚本发送它的输出到stdout。这个输出可以是有脚本产生的文档,还可以是用于检索输出的服务器的指令。

以下是脚本命名的约定:

通常,脚本产生输出并发送回给客户端。这样做的好处是脚本不需要每一个请求发送一个完整的HTTP/1.0文件头。有些脚本可以想避免服务器解析输出的额外开销,而直接通知客户端。为了从其它脚本中辨认出这些脚本,CGI要求如果脚本不想服务器解析它的文件头,脚本的名字要以nph-开头。在这个例子中,脚本的责任是返回一个响应给客户端的有效的HTTP/1.0(或者HTTP/0.9)。

以下解析文件头:

脚本的输出是以一个小文件头开始的。这个文件头包含了文本行,这个文本行和HTTP文件头格式是一样的,它是以一个空行来结束的。任何的文件头(不是服务器指令)被直接发送给客户端。当前, 这个规范定义了三个服务器指令:

Content-type :这是一个你返回的文档的MIME类型。

Location :它用于指定你想返回引用的服务器给文档,而不是真正的文档。如果这个的参数为URL,服务器件将重定向到客户端。如果这个的参数是一个虚拟目录,服务器将检索指定的文档就象客户原来已经请求那个文档。?指令在这里将起作用,而#指令必须重定向到客户端。

Status :它将用于给服务器一个HTTP/1.0状态行以发送给客户端。它的格式为nnn xxxxx,其中nnn是一个三位数的状态码,而xxxx是原因字符串,比如"Forbidden"。

CGI 规范

以下给出一些例子:

假如我有一个请求发送给HTML转换器。当转换器完成它的工作的时候,它将输出以下的内容到stdout中。

--- start of output ---

Content-type: text/html

--- end of output ---

这里注意有一个空白行在Content-type之后。

再给出另外一个例子,假如我有一个脚本,可以从这个服务器中返回文档/path/doc.txt,就象用户已经请求了http://server:port/path/doc.txt,脚本的输出为:

--- start of output ---

Location: /path/doc.txt

--- end of output ---

服务器件将执行这个请求并且将它发送给客户端。

另外,还有一个脚本可以引用我们的Gopher服务器。如果脚本想为用户提供gopher://gopher.ncsa.uiuc.edu/,它的输出为:

--- start of output ---

Location: gopher://gopher.ncsa.uiuc.edu/

--- end of output ---

最后,如果有一个脚本可以直接通知客户器。比如如果脚本是用HTTP/1.0的SERVER_PROTOCOL 来引用的,这个脚本就将输出以下的HTTP/1.0响应:

--- start of output ---

HTTP/1.0 200 OK

Server: NCSA/1.0a6

Content-type: text/plain

--- end of output ---

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有