非主流一把~~~ 用Bash 开发Web2.0
一般比较喜欢用C语言或者perl 语言来开发CGI程序, 今天非主流一把, 用Bash写CGI.. 但是php cgi 的性能远远低于mod_php, perl cgi的速度也低于 mod_perl , CGI慢慢远离了人们的视野,程序员们用Fastcgi/mod_perl/mod_php 取代了效率很低的CGI(一个连接就是一个进程). CGI也存在很多的安全问题, 编程的时候一定要小心用户的输入过滤,和ENV PATH的限制,很容易被黑客获取web server的权限.
Bash 于 perl CGI 编程对比: HTTP Head 结尾: 没有区别, 在Head中: Content-type: text/html\n\n HTTP Cookie: 没有区别, 在Head中: Set-Cookie : name=value\n HTTP GET : 理论上都一样,保存在head中 bash: $QUERY_STRING Perl: $ENV{'QUERY_STRING'} HTTP POST: 理论是一样的,POST内容放在STDIN中 bash : str=`cat` perl : read(STDIN,$POST,$ENV{'CONTENT_LENGTH'})
GET/POST: 需要写urlencode/urldecode方法,很简单 就是ASCII转为16进制 在加上'%'符号就可以了 Session: perl: 需要自己实现,或者使用use CGI::Session bash: 需要自己实现, 原理很简单,可以使用http1.1中对Session的实现的描述: 每一连接生成一个随机ID, 保持这个ID在一段时间之内有效,将这个ID存储在Cookies中(如果客户端不支持Cookies,则使用url重定向技术), 然后这个ID就好像一把钥匙,每一个ID在服务器上对应一个'柜子' 来存储Session,我们可以用简单的文件系统来实现.然后用户每次访问的时候携带自己的SessionID, 在服务器上和自己对应的‘柜子’中获得Session.
好了,我们已经掌握 HTTP 的head,get,post,cookie,session 的实现方法了, 可以用Bash开发Web应用了~甚至一可以用Bash写强大Web2.0程序, 但是效率很低的~~~
一个测试程序(先在apache中配置好cgi环境) web.sh ======================================== #!/bin/bash
printf "Content-type: text/html\n" printf "Set-Cookie:name=wangyong\n\n"
printf "Helloworld \n"
printf "GET : $QUERY_STRING\n" printf " " printf "POST: `cat` "
echo ""
echo "" printf "
" printf "ENV: `env`"
我的Web应用程序道路~返朴归真了: J2EE-->PHP-->PERL CGI-->C CGI-->Bash CGI--> ???
|