HTTP 定义了与服务器交互的不同方法,最基本的方法是 GET 和 POST。首先来走个实验,一个页面传值GetPost.aspx,另一个页面接收值GetValue.aspx
//GetPost.aspx前台:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="GetPost.aspx.cs" Inherits="GetPost" %>
<!DOCTYPE html PUBLIC "-//W 3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" method="get" action="GetValue.aspx" >
<div>
<input TYPE="text" name="Text" value="Get: Hello World"></input>
<input type="submit" value="Method=Get"></input>
</div>
</form>
<form id="form2" method="post" action="GetValue.aspx" >
<div>
<input type="text" NAME="Text" VALUE="Post: Hello World"></input>
<input type=submit VALUE="Method=Post"></input>
</div>
</form>
</body>
</html>
//GetValue.aspx后台:
if (Request.QueryString.Count != 0)
{
this.Label1.Text = Request.QueryString["Text"].ToString();
}
else
{
this.Label1.Text = Request.Form["Text"].ToString();
}
分别点击GetPost.aspx页面上的按钮,根据得出get与post的区别:
1. get是从服务器上获取数据,post是向服务器传送数据。
2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。GetPost.aspx的URL地址改变了,后面带上了参数?Text=Get% 3A+Hello+World,传递的多个参数以&连接,如字母数字字符原样发送,但空格转换为“+“号,其它符号转换为%XX,其中XX为该符号以16进制表示的ASCII(或ISO Latin-1)值。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。URL地址栏没发生改变,用户看不到这个过程。
3. 对于get方式,服务器端用Request.QueryString["Text"].ToString()获取变量的值,对于post方式,服务器端用Request.Form["Text"].ToString()获取提交的数据。但同时可以使用Request["Text"].ToString(),只是Request效率不高,不推荐使用。
4. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
5. get安全性非常低,post安全性较高。因为get将传输的值显示在url上了,所以不安全,建议一般用post传值
6. post刷新getvaluse.aspx时会弹出提示框,问是否重新发送您以前提交的信息,get不会。 7.如果不设定method,经过测试,表单将默认为get。 |