通常来说有两种方法:GET和POST,下文的例子是在thttpd firefox3.6测试的,用shell编写cgi程序。
1、GET与POST比较
GET方法:它是作为url部份数据发送,也就是在浏览器可以看得到数据,而且有长度限制。所以GET是不安全的。
wirkshark抓GET包如下:
GET /cgi-bin/abc.cgi?%E5%A7%93%E5%90%8D=yuanzhenhai&%E5%AF%86%E7%A0%81=123456&%E6%B5%8B%E8%AF%95=123456&%E6%B5%8B%E8%AF%95=123456&%E6%B5%8B%E8%AF%95=123456 HTTP/1.1
POST方法:它是作为Content-Length 后面的数据发送,没有长度限限制。
wirkshark抓POST包如下:
POST /cgi-bin/abc.cgi HTTP/1.1
Host: 127.0.0.1
/* 。。。省略。。。 */
Content-Length: 134
%E5%A7%93%E5%90%8D=yuanzhenhai&%E5%AF%86%E7%A0%81=123456&%E6%B5%8B%E8%AF%95=123456&%E6%B5%8B%E8%AF%95=123456&%E6%B5%8B%E8%AF%95=123456
2、GET示例:
3、POST示例:
1、GET与POST比较
GET方法:它是作为url部份数据发送,也就是在浏览器可以看得到数据,而且有长度限制。所以GET是不安全的。
wirkshark抓GET包如下:
GET /cgi-bin/abc.cgi?%E5%A7%93%E5%90%8D=yuanzhenhai&%E5%AF%86%E7%A0%81=123456&%E6%B5%8B%E8%AF%95=123456&%E6%B5%8B%E8%AF%95=123456&%E6%B5%8B%E8%AF%95=123456 HTTP/1.1
POST方法:它是作为Content-Length 后面的数据发送,没有长度限限制。
wirkshark抓POST包如下:
POST /cgi-bin/abc.cgi HTTP/1.1
Host: 127.0.0.1
/* 。。。省略。。。 */
Content-Length: 134
%E5%A7%93%E5%90%8D=yuanzhenhai&%E5%AF%86%E7%A0%81=123456&%E6%B5%8B%E8%AF%95=123456&%E6%B5%8B%E8%AF%95=123456&%E6%B5%8B%E8%AF%95=123456
2、GET示例:
<HTML>
<HEAD><TITLE>thttpd is running</TITLE></HEAD>
<BODY BGCOLOR="#99cc99" TEXT="#000000" LINK="#2020ff" VLINK="#4040cc">
<H3>get</H3>
<P>
it's get test.
<P>
<form method=get action="/cgi-bin/abc.cgi">
name <input type=text name=姓名><br>
password <input type="password" name="密码" ><br>
password <input type="text" name="测试" ><br>
password <input type="text" name="测试" ><br>
password <input type="text" name="测试" ><br>
<input type="submit">
</form>
</BODY>
</HTML>
3、POST示例:
<HTML>
<HEAD><TITLE>thttpd is running</TITLE></HEAD>
<BODY BGCOLOR="#99cc99" TEXT="#000000" LINK="#2020ff" VLINK="#4040cc">
<H3>post</H3>
<P>
it's post test.
<P>
<form method=post action="/cgi-bin/abc.cgi">
name <input type=text name=姓名><br>
password <input type="password" name="密码" ><br>
password <input type="text" name="测试" ><br>
password <input type="text" name="测试" ><br>
password <input type="text" name="测试" ><br>
<input type="submit">
</form>
</BODY>
</HTML>
4、abc.cgi:
#!/bin/sh
echo "Content-type:text/html"
echo ""
echo "<HTML>"
echo "<HEAD><TITLE>abc.cgi test </TITLE></HEAD>"
echo "<BODY>"
if [ "$REQUEST_METHOD" = "POST" ] ; then
QUERY_STRING=`cat -` # cat 如果[文件]缺省,或者[文件]为 - ,则读取标准输入。
echo "post"
echo "<br>"
fi
if [ "$REQUEST_METHOD" = "GET" ] ; then
echo "get"
echo "<br>"
fi
echo $QUERY_STRING
echo "</BODY>"
echo "</HTML>"