- 论坛徽章:
- 11
|
本帖最后由 Ager 于 2013-05-25 04:17 编辑
楼主啊。。。。龙哥在沙发上都把话说到这个份儿上了,你还不思考一下啊。。。。
从你在楼顶的第一句话“如果只是简单的get, post,不带有任何参数的话,都是可以很好的支持的”,貌似就说明了,你恐怕还不太理解CGI呀。。。。。
粗略地说,是这样的:
【如果用GET的话:】
WebClient将FORM中的记录按某种约定“编入”URL —— 所谓约定基本上就是用问号、&号、等号什么的将各条记录串起来 —— 然后,WebServer收到此Request,就会将问号后面的串,赋给环境变量QUERY_STRING。
如果是用Perl的话,就用$data = $ENV{'QUERY_STRING'}去拿这个环境变量。
【如果用POST的话:】
WebServer将收到的Request数据(仍是按上述约定编制FORM中的记录所得到的),放置于一块Buffer中,并将数据的长度赋给环境变量CONTENT_LENGTH —— 因为WebServer不保证为数据搞个EOF,再令CGI程序的STDIN指向那块Buffer。
如果是用Perl的话,就这样调用:read(STDIN,$data,$ENV{'CONTENT_LENGTH'})。
不论用GET还是POST,WebServer能为CGI程序(获得所谓的“参数”)所做的,到提供“记录串”就为止了(即要么用环境变量QUERY_STRING要么用STDIN)—— 在WebServer看来,是不存在什么你提到的“参数”的。
CGI程序须自己将“记录串”解开使其中的各条记录符合自己的逻辑(只是*看起来好像*起到了与CLI的“参数”类似的效果而已) —— 这是CGI程序自己的事情,WebServer不管的。
以上,仅供参考,呵呵{:3_193:}
|
|