个人博客网:https://wushaopei.github.io/ (你想要这里多有)
GET 和 POST 是HTTP 请求的两种基本方法的区别有哪些呢?
从最直观的角度来看:
GET 把参数包含在URL中, POST 通过 RequestBody 传递参数。
主观角度上看待 get 和 post的 区别:
GET 在浏览器回退时是无害的,而POST会再次提交请求;
GET 产生的URL地址可以被Bookmark,而POST 不可以
GET请求会被浏览器主动 cache ,而 POST 不会,除非手动设置
GET 请求只能通过url编码,而POST 支持多种编码方式
GET 请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留
GET 请求在URL中传送的参数是有限的,而POST是无限的
对于参数的类型,GET 请求只接受 ASCII字符,而 POST 则没有限制
GET 请求比 POST 请求更加不
安全,因为请求的参数是直接暴露在URL上,所以不能用来传递敏感信息。
从客观的角度来看待:
其实两者的区别是 : 没有区别!!
WHY?
这里要说到,GET 和 POST 是什么了?
它们都是HTTP协议的两种发送请求的方法。
而HTTP请求是基于TCP/IP 的关于数据如何在万维网中进行通信的协议。
HTTP 的底层是TCP/IP。所以GET 和 POST 的底层也是TCP/IP,也就意味着,GET / POST都是TCP 链接。 GET 可以做POST一样的操作。GET 请求可以有requestBody ,而POST也可以有 URL参数。
那么,既然它们两者都具有对方的特性,我们为什么还要对 GET 和 POST 进行区分呢?
其实,原因很简单,底层协议都基于 TCP ,但是,GET 请求和 POST 请求的请求规则是不同的,前者只发送一次数据包,而后者需要发送两次,发送一次,花费的时间成本地,效率高;而发送两次数据包,时间成本在网络性能优异的情况下,其实影响不大,而在网络环境恶劣的情况下,却能保证数据包的完整性。
具体的,来看一看 GET 和 POST 请求的过程:
GET请求的过程:
- 浏览器请求 TCP 链接(第一次握手)
- 服务器答应进行 TCP 链接(第二次握手)
- 浏览器确认,发送 GET 请求头和数据(第三次握手,这个报文比较小,所以 HTTP会在此时进行第一次数据发送)
- 服务器返回 200 ok 响应
POST 请求的过程:
- 浏览器请求TCP链接(第一次握手)
- 服务器答应进行 TCP 链接(第二次握手)
- 浏览器确认,并发送 POST 请求头(第三次握手,这个报文比较小,所以HTTP会在此时进行第一次数据发送)
- 服务器返回 100 continue响应
- 浏览器开始发送数据
- 服务器返回 200 OK 响应
由上初步估测: GET 的总耗是 POST 的 2/3左右