问题重现:今天进入一个网站,感觉页面跳转有点慢,页面刷新之后的数据却不是很多,就36条,于是就怀着好奇的心打开了F12,没想到看到请求方法的时候,把我惊呆了,query查询方式都是直接使用post了吗?这是完全不考虑系统性能?所有接口请求方式统一用Post请求方法?应该不会有这种项目了吧!(甚是震惊)
一、基于上述问题,聊一下Get和Post请求之间的区别:
1、url可见性
get是通过地址栏URL传递,通过&进行参数分割。
post传参方式参数URL不可见,将参数存放在HTTP包体内。
2、传递数据大小
get传递数据的大小受到URL大小的限制,最大为2048个字符,
post 传递数据没有限制
3、后退页面
GET 回退页面不会有影响。
POST回退页面会重现进行提交。
4、缓存
GET请求可以被缓存,
POST请求不可以被缓存
5、编码方式
get请求只URL编码,post支持多种编码方式。
get只支持ASCII字符,post没有字符类型限制
6、历史记录
get请求的记录会留在历史记录中,post请求不会留在历史记录
总结:
(1)post安全性比get方式安全,因为post数据存放在HTTP包内,一般不会被查到,但是HTTP下都是明文传输,post仍然可以被查找到,增加安全性最好使用https协议。
(2)post的缺点:速度比get传输慢,get的效率更高。
二、为什么get的效率比post高
post在接收返回来的数据会先将请求头发送给服务器确认,然后才真正的发送数据,(相当于第一次先向服务器打个招呼,第二次才将数据真正的发过来,get则是直接发送数据。专业的说法是,get产生一个TCP数据包,post产生两个TCP。数据包但并不是所有的浏览器post都会请求两次,火狐浏览器就会请求一次)总结起来就是请求的过程比get更多。