网络基础——GET请求与POST请求的区别
前言:
一般来说,GET请求是获取数据,POST请求是提交数据的。如下,主要是出自w3school官网总结,加上本人的一点提炼。
不同点 | GET | POST | 分析备注 |
幂等性 | 幂等,是无害的 | 不幂等 | 幂等性,可以理解为,多次重复发送同一请求,结果是一样的。 |
缓存 | 能被缓存 | 不能被缓存 | 对请求的数据做缓存:1、缓存在浏览器,直接获取数据,无需发送请求;2、缓存在代理(nginx),请求发到代理,由代理提供数据,减轻服务器压力;3、缓存在服务端,减少解析数据的带宽消耗,类似zero-copy给客户端。 |
安全性 | 相对更低 | 相对高一点 | 1、首先,http中的get、post的安全性都不高,因为http协议是明文传输的,想要提高安全性,必须采用加密的https; 2、GET传输数据的时候是在URL地址中的、对所有人都是是可见的,且是有浏览器缓存记录的;而post传输的时候是放在HTTP的请求体之中,并且是经过urlencode编码的。因此相对更安全。 |
传输效率 | 相对更快 | 相对更慢 | 1、get是在三次握手后,直接发请求,返回响应数据; 2、post是分请求header和body的,服务器解析heade和body都是需要消耗资源的,但有些请求是无效的,所以服务器会有些策略,让浏览器先发header,然后解析header,判断允许不允许浏览器继续发body(100continue),然后浏览器再次发body,最后浏览器得到想要的响应数据。因此,等于是post多了一个通讯的来回,当然更耗时。 |
数据长度、类型的限制 | GET往URL添加数据时,长度限制是2048个字符;get请求只允许ASCII码值 | 长度没有限制;类型也没有限制 | 其实,get请求中的URL如果带有非ASCII码数据,发请求前会转成ASCII码 |
编码格式 | application/x-www-form-urlencoded | application/x-www-form-urlencoded等多重编码格式 | 在抓包时,也要关注content-type |
历史记录 | 参数保留在浏览器的历史记录中 | 参数不会保留在浏览器的历史记录 | 参照安全性的不同 |
可见性 | 请求数据显示在URL中,所有可见 | 请求数据在BODY中,不可见 | 参照安全性的不同 |