GET与POST的区别

  前几天有个同学问我GET与POST有什么区别,在此之前我只知道GET与POST的区别如下:

1.GET请求的数据会附在URL之后,POST则把提交的数据放置在HTTP包的包体中;

2.GET方式提交的数据最多只能是1024个字节,理论上POST没有限制,可传较大量的数据;

3.POST的安全性要比GET高。

  今天我百度搜索了一下,了解到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字符集,默认是ISO-8859-1编码;

6.GET是form的默认方法。

  然而这只是网上最普遍的答案,接下来的观点否认了以上提到的GET与POST的区别,具体分析如下:

1.GET和POST与数据如何传递没有关系

  GET和POST是由HTTP协议定义的。在HTTP协议中,Method和DaGETa(URL,Body,Header)是正交的两个概念,也就是说,使用哪个Method与应用层的数据如何传输是没有相互关系的。

  HTTP没有要求,如果Method是POST就要将数据放在Body中;也没有要求,如果Method是GET,数据(参数)就一定要放在URL中,而不放在 Body中。GET方式将数据放在URL之后,POST方式将数据放在Body中只是HTML标准对于HTTP协议的用法的约定。

2.HTTP协议对GET和POST都没有对长度的限制

  HTTP协议明确地指出了,HTTP头和Body都没有长度的要求。而对于URL长度上的限制,有两个方面的原因造成:

  1,浏览器。据说早期的浏览器会对URL长度做限制。

  2,服务器。URL长了,对服务器处理也是一种负担。原本一个回话就没有多少数据,现在如果有人恶意的构造几个几M大小的URL,并不停地访问服务器,服务器的最大并发数显然会下降。由此多数服务器出于安全,稳定方面考虑,会给URL的长度加限制,但这个限制是针对所有HTTP请求的,与GET和POST没有关系。

  我个人认为以上的观点对于GET和POST的区别分析都有一定的道理,只是他们分析的角度不同,前者是从客户端与服务器的角度来分析GET与POST的区别;而后者是从HTTP协议本身来分析GET与POST的区别。

原文地址:https://www.cnblogs.com/lykblog/p/4693985.html