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。我都转向其他页面了,还不让我终止原来页面的响应.

你可能感兴趣的:(request)