GET 和 POST 都是 HTTP 协议中发送请求的方法。
GET方法常用来请求资源,获取数据
POST方法用于将数据提交到指定的资源,一般会导致在服务器上的状态变化或副作用
但是,其实两个请求本质都是TCP链接,并没有差别。只是由于使用上的一些规定和限制,导致他们在应用的过程中体现出了一些不同。
两者的区别:
1、参数位置不一样,GET请求是将参数拼加到了URL上传递,而POST是将参数写在报文中传递。
2、参数长度限制不同,GET参数通过URL传递,而URL的长度是有限制的,通常是2K,POST对请求参数大小没有限制
3、因为参数位置的限制,所以GET请求传输的类型只能是字符串,但是POST请求可以传多种类的数据,比如视频,图片,文档等。
4、缓存不同,可以对GET请求的数据进行缓存,也可以将GET请求保存为书签,但是POST请求因为会修改服务器上的资源,所以一般不会缓存POST请求,也不能把POST请求保存为书签。
5、GET请求会产生一个数据包,将header和data一次性发送完成;POST会产生两个数据包,一个发送header确定服务器可以响应并具备接收数据的能力,响应100。成功后第二个包再第一个包成功后再带着data发出。(有的浏览器POST也将两个包一次性发出)
6、刷新和回退的时候GET请求无害,但是POST请求会重新提交。这个问题其实还是源于:POST请求会产生一些副作用。get请求只是重新获取了一下数据,并且有时候还是直接返回的缓存,无害。但是post请求往往会带一些副作用,比如像本篇文章的阅读量,刷新一次就+1。
关于数据安全
1、从数据隐私的方面来看,get会将参数拼接到url上,post会将数据写在报文里。表面看来post传输的数据更具有隐蔽性一点,但是用于http协议是明文传输,只要略通技术,抓个包就都暴露啦。所以两者在数据隐私方面来看都不是绝对安全的,如果要避免传输过程中数据被窃取,就要使用HTTPS协议,这样会进行加密传输。
2、从服务器数据安全来看,get请求是只读操作,无论操作多少次,都不会对服务器上的数据产生影响。而post请求一般会修改服务器上的资源,所以从这方面来看,get要比post安全。
不过这是按照规范语义分析的结果,在实际开发中,也可以用get请求来删除数据,这样get请求就变的“不安全”了,所以从服务器数据安全的角度来看,两个方法安全不安全并不是绝对的。