说完原理性的问题,我们再从表面现像上面看看GET和POST的区别:
1.GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据。
POST把提交的数据则放置在是HTTP包的包体中。
2."GET方式提交的数据最多只能是1024字节,理论上POST没有限制,可传较大量的数据,IIS4中最大为80KB,IIS5中为100KB"??!
以上这句是我从其他文章转过来的,其实这样说是错误的,不准确的:
1).首先是"GET方式提交的数据最多只能是1024字节",因为GET是通过URL提交数据,那么GET可提交的数据量就跟URL的长度有直接关系了。而实际上,URL不存在参数上限的问题,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。
注意这是限制是整个URL长度,而不仅仅是你的参数值数据长度。
(2).理论上讲,POST是没有大小限制的,HTTP协议规范也没有进行大小限制,说“POST数据量存在80K/100K的大小限制”是不准确的,POST数据是没有限制的,起限制作用的是服务器的处理程序的处理能力。
总结一下,Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求,在FORM(表单)中,Method默认为"GET",实质上,GET和POST只是发送机制不同,并不是一个取一个发!
get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
get安全性非常低,post安全性较高。
HTTP 定义了与服务器交互的不同方法,最基本的方法是 GET 和 POST。事实上 GET 适用于多数请求,而保留 POST 仅用于更新站点。根据 HTTP 规范,GET 用于信息获取,而且应该是 安全的和幂等的。所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET 请求一般不应产生副作用。幂等的意味着对同一 URL 的多个请求应该返回同样的结果。完整的定义并不像看起来那样严格。从根本上讲,其目标是当用户打开一个链接时,她可以确信从自身的角度来看没有改变资源。 比如,新闻站点的头版不断更新。虽然第二次请求会返回不同的一批新闻,该操作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。反之亦然。POST 请求就不那么轻松了。POST 表示可能改变服务器上的资源的请求。仍然以新闻站点为例,读者对文章的注解应该通过 POST 请求实现,因为在注解提交之后站点已经不同了
在FORM提交的时候,如果不指定Method,则默认为GET请求,Form中提交的数据将会附加在url之后,以?分开与url分开。字母数字字符原 样发送,但空格转换为“+“号,其它符号转换为%XX,其中XX为该符号以16进制表示的ASCII(或ISO Latin-1)值。
Get post都是像服务器(主机)的请求方式
1)哪一些情况下,浏览器使用get方式发请求:
a,直接在浏览器地址栏输入某个地址
b,点击链接
c,表单默认的提交方式
2)get请求的特点
a,如果有请求参数,会将这些参数添加在请求资源路径的后面(所以,get方式能够提交的参数大小有限制)。
b,get方式还会将请求参数显示在浏览器地址栏,不安全。
3)哪一些情况下,浏览器会使用post方式发请求
设置了表单的method="post"。
4)post请求的特点
a,请求参数会添加到实体内容里面,参数大小没有限制。
b,请求参数不会显示在浏览器地址栏,相对安全(并不会对请求参数加密)。
参数传递方式
get传参
get传参方式是将参数以参数1=参数值1&参数2=参数值2这种形式拼接在URL后面进行传递的,比如说,使用js调用Flash打印一张模板,同时传递2个参数到该模板中,那么其get方式传参打印的url代码为:
http://localhost:8075/WebReport/ReportServer?reportlet=report.cpt&p1=a&p2=b
js调用FR打印方法的完整代码为:
var url="http://localhost:8075/WebReport/ReportServer?reportlet=report.cpt&p1=a&p2=b";
var isPopUp = false;
var config = {url : url,isPopUp : isPopUp}
FR.doURLPDFPrint(config);
post传参
post传参方式是将参数作为http请求的内容,发送到指定的URL中去,并不是拼接在URL中的,其URL如下代码:
http://localhost:8077/TestCase/ReportServer
参数会通过一个专门的格式传递过去,完整代码如下:
var printurl="http://localhost:8077/TestCase/ReportServer";
var reportlets ="[{reportlet: '1.cpt', p1: 'a'}]";
var config = {
url : printurl,
isPopUp : false,
data : {
reportlets: reportlets //将参数放到data里面传到指定的URL中
}
};
FR.doURLPDFPrint(config);
post传参传递的参数是看不到的,保密性比较好。
长度比较
通过参数传递的方式不同,我们可以看到通过get方式传参,其URL的长度会远远长于post方式,这就意味着,get传递参数其长度有限制,如果超过URL限定的长度大小,则无法进行数据传递,但是post方式却没有这方面的限制,其URL的长度是固定的,并没有随着参数的增加而变长