HTTP|GET 和 POST 区别

前言

关于get和post的区别,这是经典的面试题,以前了解的总是很表面,今天深入的了解了一下两者的真正区别
大致可以分四点来说:

1. 关于传参数

get通过URL或Cooike传参,而post将数据放入body中,这是因为Http协议的用法约定,并不是它们本身的区别

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

HTTP没有要求,如果Method是POST数据就要放在BODY中。也没有要求,如果Method是GET,数据(参数)就一定要放在URL中而不能放在BODY中。

2. 关于提交的数据长度

 get方式提交的数据有长度限制,而post的数据可以非常大,这是因为它们使用的操作系统和浏览器的不同引起的区别,也不是get和post本身的区别

3. 关于安全性

post比get安全,因为在地址栏上不可见。

通过GET提交数据,用户名和密码将明文出现在URL上,因为登录页面有可能被浏览器缓存,其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了,除此之外,使用GET提交数据还可能会造成Cross-site request forgery攻击

4. 终极区别

其实get和post的最大区别主要是get请求的幂等性,post请求不是

正因为它们有这样的区别,所以不应该且不能用get请求做数据的增删改这些有副作用的操作。因为get请求是幂等的,在网络不好的隧道中会尝试重试。如果用get请求增数据,会有重复操作的风险,而这种重复操作可能会导致副作用(浏览器和操作系统并不知道你会用get请求去做增操作)

什么是幂等性?

幂等性是指一次和多次请求某一资源应该具有同样的副作用。也就是说同一URL的多个请求应该返回同样的结果

坚持原创技术分享,您的支持将鼓励我继续创作!