22 / 01 / 25
Get请求和Post请求是HPPT中最常用的请求,那么他们有什么区别呢?
我们来看看标准答案:
- GET在浏览器回退时是无害的,而POST会再次提交请求。
- GET产生的URL地址可以被Bookmark,而POST不可以。
- GET请求会被浏览器主动cache,而POST不会,除非手动设置。
- GET请求只能进行url编码,而POST支持多种编码方式。
- GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
- GET请求在URL中传送的参数是有长度限制的,而POST么有。
- 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
- GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
- GET参数通过URL传递,POST放在Request body中。
以上标准答案来自w3schools 。
到这里前端的小伙伴们可能会说,他们的区别是:
GET使用URL或Cookie传参,而POST将数据放在BODY中
这其实是错的!
GET和POST是由HTTP协议定义的。在HTTP协议中,Method和Data(URL, Body, Header)是正交的两个概念,也就是说,使用哪个Method与应用层的数据如何传输是没有相互关系的。
HTTP没有要求,如果Method是POST数据就要放在BODY中。也没有要求,如果Method是GET,数据(参数)就一定要放在URL中而不能放在BODY中。
因此网上的那些说法都是错的!
HTTP是什么?Hyper Text Transfer Protocol(超文本传输协议)的缩写,是基于TCP/IP的关于数据如何在万维网中如何通信的协议。
具有以下特征:
我们惊讶的发现,HTTP、Get和Post他们的底层都是TCP/IP,也就是说,GET/POST都是TCP链接。GET能做的,POST也能做。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。
HTTP只是个行为准则,而TCP才是GET和POST怎么实现的基本。
另外,GET和POST还有一个重大区别:
GET产生一个TCP数据包;POST产生两个TCP数据包。
参考文献: