Get和Post的区别
待扩充区别
Get:只能使用url传数据,请求页面的时候都使用的是get。
Post:需要传文件或者传比较复杂的数据的时候,就使用post。
扩充版区别
- Get通过url传递参数,Post可以通过url和requestbody传递参数(Get请求除了使用HTTP头传递信息,另外就只能使用url传递信息;而Post请求可以使用url、HTTP头或是HTTP的请求体)。
- Get请求可以缓存,Post请求不能缓存。
- Get只能进行url编码,Post传输的编码方式很多。
- Get请求参数会保存在浏览器历史中,Post不会。
- Get传递的参数上限是2k,Post没有限制(浏览器中对url的长度也有限制,Post请求因为可以使用请求体传输数据,所以不存在这个问题,Post请求可以使用请求体传输二进制数据或是字符串等等,传输JSON数据或者是上传文件的时候,数据都会在请求体中)。
- Get只接受ASCII字符,Post没有限制。
总结版区别
Get:用于获取信息,可缓存,无副作用,且是幂等的,通过url传递参数,且参数url可见(GET方法用于获取资源,不应有副作用,所以是幂等的)。
Post:用于修改服务器上的数据,不可缓存,有副作用,非幂等,通过 body 体传递参数,且参数 url 不可见。
【补充】
副作用定义:是否对服务器上资源进行改变。
幂等性:一次或多次请求某一个资源应该具有相同的副作用。
使用场景判断
因此,若符合下列情况之一,则使用Get方法:
- 请求是为了查找资源,HTML表单数据仅用于帮助搜索。
- 请求结果无持续性的副作用。
- 收集的数据及HTML表单内的输入字段名称的总长不超过2k(1024个字符)。
若符合下列情况之一,则使用Post方法:
- 请求的结果有持续性的副作用,例如,数据库内添加新的数据行。
- 若使用Get方法,则表单上收集的数据会使得URL过长。
- 需要传送的数据不是使用ASCII编码的。
安全性对比
Post比get更安全,因为数据在地址栏上是不可见的。
然而实际上,从传输的角度来说,Post 和 Get 都是不安全的,因为他们在网络上都是明文传输,只要在网络节点上捉包,就能获取完整的数据报文。因此想要安全传输,就需要加密,即 HTTPS 。
参考资料:
- 面试官:说一说GET、POST的区别
- GET 和 POST 请求的区别与安全性