GET和POST的区别
这个问题很基础,但是很多小伙伴都回答不到根本上。一般在面试初级和中级开发工程师的时候,这个问题是必问的问题,高级工程师问到的概率是特别大,但是也容易问到。下面我就给大家讲讲如何完美回答这个问题。
GET和POST属于一种请求方式,既然是请求方式,那么就有对应的请求报文,我们先来说说他们两个在请求报文上的区别:
1.请求报文的区别
对于一个请求报文的结构如下:
请求报文的结构
GET请求报文的结构:
GET请求报文的结构
POST请求报文的结构:
POST请求报文的结构
通过上面两个图的对比,我们很容易看出,GET和POST在请求报文上只是数据存放的位置不一样,GET是存放在URL中的,POST是存放在请求报文体中的。
希望小伙伴们还是记住这个请求报文的结构,对你深入理解请求的过程非常有帮助。
2.TCP数据包及浏览器请求响应的区别
GET请求,只产生一个数据包,当发送请求的时候,浏览器会把http header和data一并发送过去,服务器响应。
POST请求,产生两个TCP数据包,一个是http header数据包一个是data数据包。当发送请求的时候,浏览器先发送header数据包,服务器响应100 continue,浏览器再发送data数据包,服务器响应。
这是很多小伙伴们回答的时候都回答不上的点,同时也是面试官想要的答案之一,希望小伙伴们记住这一点。
3.回退影响
GET请求,回退的时候是没有影响
POST请求,回退的时候会再次提交请求
4.浏览器缓存
GET请求,请求返回的内容会被浏览器主动cache
POST请求,请求返回的内容不会主动cache,除非手动设置
5.编码方式
GET请求,只能进行URL编码
POST请求,支持多种编码方式
6.参数长度限制
GET请求,有参数长度限制
POST请求,没有参数长度限制
7.参数的数据类型
GET请求,只接受ASCII字符
POST请求,没有限制
8.URL地址被Bookmark(URL地址可以做书签收藏起来)
GET请求,可以
POST请求,不可以
9.效率
GET请求,效率相对较高(因为生成一个数据包,一次发送)
POST请求,效率相对较低,但是这个差别可以忽略(因为生成两个数据包,两次发送)
10.安全性
有很多小伙伴会回答GET的安全性比POST的安全性高,这是不对的。GET和POST都没有什么安全性可言。
get请求参数在url地址上,直接暴露
post请求的参数放body部分,按F12也直接暴露了,所以没啥安全性可言
相信大家看完这篇文章后,会对GET和POST的区别有了更加不一样的认识,希望大家能有所收获!