在了解get请求与post请求区别的前提,我们需要知道get请求与post请求传递参数的原理:
- get请求:
- 浏览器发送:参数是在url路经中进行拼接,是在请求行中
- 服务器接收:切割url,得到参数;
- post请求
- 浏览器发送:
- 将传递的参数(数据)切割为一个一个的数据包(数据包的数量与带宽和数据大小有关);
- 在发送的时候,并不是一起发过去的,而是以数据包为单位进行发送的;
- 此时会发生丢包的现象(低概率)
- 当所有数据包发送完毕,会发送一个标识,标识所有数据包发送完毕
- 服务端接收:
- 在接收时,利用 累加器思想 ;
- 存在data事件,执行时机:每次接收一个数据包就会执行一次;
- 存在end事件,执行时机:当所有数据包接收完毕,会执行一次;
- 浏览器发送:
由原理我们可以看出get与post请求的区别
- [1]位置不同
- get请求的参数是在请求行中;
- post请求的参数是在请求体中;
- [2]大小不同
- get请求的参数,拼接在路经中,有大小限制,--一般在1M左右
- post请求的参数,在请求体中,不存在大小限制
- [3]速度(效率)不同
- get请求的参数,请求速度快;
- post请求的参数,请求速度慢;
- [4]安全性不同
- get请求的参数,不安全(拼接在路径中)
- post请求的参数,安全(传输过程中为二进制)
使用场景
- 安全性问题用post(eg:登录注册)
- 参数具有文件的使用post
- 其余一般优先使用get
面试题
[1]谈谈你对post的理解?什么场景下会用到post?为什么不用get?