1.
一般来说GET是获取数据,POST是提交数据的。但是因为GET和POST都是HTTP的方法,HTTP又是是基于TCP/IP的关于数据在万维网中 如何让通讯的协议。所以本质上来说GET和POST请求是没有区别 的,都是TCP链接。他们能做的事情是一样的。
HTTP协议既然有了这两个方法,就是为了在特定的情况下区分应用。就有了我们所说的GET是获取数据,POST是提交数据的。
2.
GET传输数据的时候是在URL地址中的、对所有人都是是可见的、是不安全的、是有浏览器缓存记录的。所以说GET是不安全的,发送密码等数据的时候不要用GET传输。
GET只能传输ASCLL字符,不能进行编码。
POST传输的时候是放在HTTP的请求体之中的,并且是经过urlencode编码的所以是相对安全的。
POST是没有对数据类型的限制的,二进制数据也是可以的。
3.
HTTP协议并没有对GET和POST的长度做限制,其实是浏览器限制了他们传输大小。
URL地址是有长度限制的,浏览器不同长度限制的具体数值也是不一样的。比如IE是2083字节。需要注意的是这些仅仅是URL地址栏的长度限制。
理论上来说POST的长度是没有限制的,但是受服务器的配置限制或者内存大小的限制,造成了实际开发中POST也是有数据长度的限制的。可以在PHP下修改php.conf中的postmaxsize值来设置POST的大小。
4.为什么说GET比POST更快?
有一个原因是POST需要在请求的body部分包含数据,所以会多了几个描述部分的首部字段比如:content-type,但这是微乎其微的,可以忽略不计。
另外一种愿意是POST和GET请求的过程是不一样的
POST请求的过程:先进行3次握手,然后服务器返回100continue响应,浏览器再次发送数据,服务器返回200成功响应。
GET请求的过程:也是先进性3次握手,然后服务器返回成功响应。
也就是说POST是要比GET多进行一次数据传输的,所以GET请求就比POST请求更快。
但是在现在服务器配置较高和网速较快的情况下,这多出来的一次数据传输在实际中并没有什么影响。
5.
因为GET是获取数据,所以GET请求是安全且幂等的,是无害的。这个安全指得是对数据不会造成影响。幂等简单的来说就是无论获取多少次数据得到的资源都是一样的。
POST是向服务器传输数据,数据会被重新提交,所以就会有对原有的数据造成伤害。