接口查询方式直接用Post请求?还不懂Post和Get的效率差别?

2,216 阅读2分钟

问题重现:今天进入一个网站,感觉页面跳转有点慢,页面刷新之后的数据却不是很多,就36条,于是就怀着好奇的心打开了F12,没想到看到请求方法的时候,把我惊呆了,query查询方式都是直接使用post了吗?这是完全不考虑系统性能?所有接口请求方式统一用Post请求方法?应该不会有这种项目了吧!(甚是震惊) image.png

一、基于上述问题,聊一下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更多。