回答此问题:先回答什么是http?什么是post?什么是get? 进而展开…
1. 简单解释HTTP
1:HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写
2:字面意思理解:就是服务器传输超文本到本地浏览器的一种传送协议。
3:HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
总结性的一句话:HTTP 是基于 TCP/IP 协议的应用层协议。它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口。
2. post于get 二者的共同点
1: Post 和 Get 是 HTTP 请求的两种方法。
2:都需要通过建立TCP/IP连接
3. post于get 二者的区别
(1)从应用场景上来说:
1:get用来请求数据,post用来修改数据。
2:GET 请求是一个幂等的请求,一般 Get 请求用于对服务器资源不会产生影响的场景,比如说请求一个网页
3:而 Post 不是一个幂等的请求,一般用于对服务器资源会产生影响的情景。比如注册用户这一类的操作。
(2)缓存方面:
1:因为不同的应用场景,Get用来请求数据,所以浏览器一般会对 Get 请求缓存,但很少对 Post 请求缓存。
(3)传递参数的方式:
1:get采用明文传输,将请求的参数放入 url 中向服务器发送,而post将请求参数放在请求体中。
2:Get 请求的报文中实体部分为空,Post 请求的报文中实体部分一般为向服务器发送的数据。
(4)安全性方面:
1:正是由于传递参数方式的不同,导致get请求的明文存在安全隐患。
2:而post将参数存在body中是相对安全的。
4.名词“幂等”解释:
幂等的概念是指同一个请求方法执行多次和仅执行一次的效果完全相同。按照RFC规范,PUT,DELETE和安全方法都是幂等的。同样,这也仅仅是规范,服务端实现是否幂等是无法确保的。引入幂等主要是为了处理同一个请求重复发送的情况,比如在请求响应前失去连接,如果方法是幂等的,就可以放心地重发一次请求。这也是浏览器在后退/刷新时遇到POST会给用户提示的原因:POST语义不是幂等的,重复请求可能会带来意想不到的后果。
其他:
1: 因为请求的 url 会被保留在历史记录中。并且浏览器由于对 url 有一个长度上的限制,所以会影响 get 请求发送数据时的长度。
2:这个限制是浏览器规定的,并不是 RFC 规定的。还有就是 post 的参数传递支持更多的数据类型。