Get和Post的区别

待扩充区别

Get:只能使用url传数据请求页面的时候都使用的是get。

Post:需要传文件或者传比较复杂的数据的时候,就使用post。

扩充版区别

  1. Get通过url传递参数,Post可以通过url和requestbody传递参数(Get请求除了使用HTTP头传递信息,另外就只能使用url传递信息;而Post请求可以使用url、HTTP头或是HTTP的请求体)。
  2. Get请求可以缓存Post请求不能缓存
  3. Get只能进行url编码Post传输编码方式很多
  4. Get请求参数保存在浏览器历史中,Post不会。
  5. Get传递的参数上限是2k,Post没有限制(浏览器中对url的长度也有限制,Post请求因为可以使用请求体传输数据,所以不存在这个问题,Post请求可以使用请求体传输二进制数据或是字符串等等,传输JSON数据或者是上传文件的时候,数据都会在请求体中)。
  6. Get只接受ASCII字符Post没有限制

总结版区别

Get:用于获取信息可缓存无副作用且是幂等的,通过url传递参数且参数url可见(GET方法用于获取资源,不应有副作用,所以是幂等的)。

Post:用于修改服务器上的数据不可缓存有副作用非幂等,通过 body 体传递参数且参数 url 不可见

【补充】
副作用定义:是否对服务器上资源进行改变。
幂等性:一次或多次请求某一个资源应该具有相同的副作用。

使用场景判断

因此,若符合下列情况之一,则使用Get方法:

  1. 请求是为了查找资源,HTML表单数据仅用于帮助搜索。
  2. 请求结果无持续性的副作用。
  3. 收集的数据及HTML表单内的输入字段名称的总长不超过2k(1024个字符)。

若符合下列情况之一,则使用Post方法:

  1. 请求的结果有持续性的副作用,例如,数据库内添加新的数据行。
  2. 若使用Get方法,则表单上收集的数据会使得URL过长。
  3. 需要传送的数据不是使用ASCII编码的。

安全性对比

Post比get更安全,因为数据在地址栏上是不可见的

然而实际上,从传输的角度来说,Post 和 Get 都是不安全的,因为他们在网络上都是明文传输,只要在网络节点上捉包,就能获取完整的数据报文。因此想要安全传输,就需要加密,即 HTTPS 。

参考资料:

  1. 面试官:说一说GET、POST的区别
  2. GET 和 POST 请求的区别与安全性