HttpRequest的POST和GET的区别[摘自百度知道]

一、POST和GET区别
Form中的get和post方法,在数据传输过程中分别对应了HTTP协议中的GET和POST方法。二者主要区别如下:
1、Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据。
2、Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL。
3、Get是不安全的,因为在传输过程,数据被放在请求的URL中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一同显示在用户面前。Post的所有操作对用户来说都是不可见的。
4、Get传输的数据量小,这主要是因为受URL长度限制;而Post可以传输大量的数据,所以在上传文件只能使用Post(当然还有一个原因,将在后面的提到)。
5、Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。
6、Get是Form的默认方法。
======举例:======
http://zhidao.baidu.com/question/6673234.html
二、Cookie就是服务器暂存放在你计算机上的一笔资料,好让服务器用来辨认你的计算机。
当你在浏览网站的时候,Web服务器会先送一小段资料放在你的计算机上,Cookie 会帮你把在网页上所输入的文字或是一些选择,都记录下来。当下次你再光临同一个网站,Web服务器会先看看有没有它上次留下的Cookie资料,有的话,就会依据Cookie里的内容来判断使用者,送出特定的网页内容给你。
======举例:======
写入:
response.Cookies("ok")=123
读取:
dim aa
aa=request.Cookies("ok")
response.write (a)
**************************************************
参考资料:http://zhidao.baidu.com/question/1201107.htmlhttp://zhidao.baidu.com/question/872547.html

****************************************************************

我们的form表单的method方法,有两个,post,get.它在页面传值的时候的区别也就是上面提到的三点.

先来看一下post方法.

这个方法在asp时代应该跟程序员打交道很多的,因为那时候没有现在的ViewState,每个页面要恢复原来的状态,都要将页面Post给自身,然后挨个取值,重新赋值.现在这些琐碎的事情都让ViewState代劳了.所以将页面post给自身的动作,在某种程度上已经被Asp.net的程序员们忘却了,所以Post也就被大部分的忽视了,这就是技术进步的双刃剑,带来方便的同时,蒙上你的眼睛。

ViewState必须包含在

的窗体下,而只要包含了"runat="server""的标志,就甭想Post到其他页面中去,为什么?老盖说,我的ViewState是保存当前页面状态的,你要转到其他页面,他说,不行,**不认识的参数.如果想Post一个窗体,咋办?有四种方式可供选择.

1.在页面上新建一个form,不要加上runat="server"的标志,当然在这个窗体下的控件也就不用想用Viewstate来传值了.当在其他有runat="server"的窗体的中的按钮事件中,手动调用新建form的submit() 函数.

传送页面代码如下:


<form?id="Form1"?method="post"?runat="server">
????????????
<input?id="btnTransfer"?type="button"??onclick="post();"?runat="server">
????????????
<input?type="text"?runat="server"?id="SourceData">
????????
form>
????????
<form?id="forPost"?method="post">
????????????
<input?type="text"?runat="server"?id="SourceData2">
????????
form>


<script?language="javascript">
????????????
function?post()
????????????{
????????????????forPost.action
="DestinationPage.aspx";
????????????????forPost.submit();
????????????}
????????
script>


接收页面

string?a=Request.Form["SourceData2"].ToString();


2.通过Session取值,在一个页面中赋值,在其他页面中共享,这个方式也被广泛应用,个人不倾向于用这种方式,我怕造成Session值的混乱无序,Session用来存一些公共的东西已经累得够呛了。

3.通过Context传值,在传送页面之前,将需要传递到其他页面的值存在Context中。示例代码如下:

传送页面

//点击某个button时触发
private?void?btnTransfer_ServerClick(object?sender,?EventArgs?e)
????????
{
????????????Context.Items[
"SourceData"]=SourceData.Value;
????????????Server.Transfer(
"DestinationPage.aspx");
????????}


接收页面

string?a=Context.Items["SourceData"].ToString();


4.通过Server.Transfer的方式。
这个方式在方法三种已经用到了,不过可以在调用页面为要传递到被调用页面的值创建属性(当然可以直接将它设成public),这样就可以在其他页面访问了。

传送页面

//要传送的值
private?
System.Web.UI.HtmlControls.HtmlInputText?SourceData;

public?string?getSourceData
{
??
get
??
{
????
return?SourceData.Value;
??}

}


//传送页面
Server.Transfer("DestinationPage.aspx");


接收页面

private?SourceClass?sourcePage;

sourcePage
=(SourceClass)Context.Handler;
????????????
string?aa=sourcePage.getSourceData;


以上就是Post的在不同页面传递数据的方式了。
下面是get方法
我常用的是? 传送页面

string?aa=SourceData.Value;
????????????
string?bb=SourceData.Value;

????????????
string?url="DestinationPage.aspx?parameter1="+aa+"¶meter2="+bb;
????????????Response.Redirect(url,
false);


接收页面

string?aa=Request.QueryString["parameter1"].ToString();
????????????
string?bb=Request.QueryString["parameter2"].ToString();


至于?Response.Redirect(url,false)里的false都是Response.End()这个方法惹的祸,老盖说,写成false就好了,因为默认是true。我都转向其他页面了,还不让我终止原来页面的响应.

posted @ 2006-07-17 18:14  meteorcui  阅读(6052)  评论(0编辑  收藏  举报