GET和POST请求区别

首先看一下菜鸟教程中对于GETPOST请求的比较
GET和POST请求区别_第1张图片

关于HTTP

  1. 最初是浏览器与服务器之间的通讯协议,GET用于读取资源,POST用于提交表单
    GET和POST请求区别_第2张图片
  2. 后来被扩充到接口格式的定义,GETPOST 作为接口的请求方式,格式如下
  {
    method:{GET/POST}
    url:""
    header:{}
    body:{}
  }

协议核心包括methodurlheaderbody组成。其中method就是描述具体的请求方式,可以是GETPOST或者其他,协议本身并没有要求GET请求的参数一定要放queryPOST请求的参数一定要放body,也就是说,从接口定义的角度去看,纯粹只是一个请求方式的差异,协议本身并没有对两者做过多的限制,完全可以把该请求的参数放到body或把POST请求的参数放到query,当然过分的放开会增加项目开发的沟通成本,降低开发效率。对于上面的问题工程师提出了一系列的解决方案,其中RESULTFUL接口规范使用面最为广泛。

GET请求有上限,POST传输无上限?

这种说法是比较片面的,GET请求参数一般约定俗称的放在URLquery中,而又因为URL的长度有上限,因此得出这个结论,而关于URL的长度,HTTP协议本身也没有对GET或者POST做过多的限制,只是浏览器和服务端分别做了不用程度的限制而已,浏览器IE限制在2048个字符,Chrome限制在2M...

GET请求:
http://xxx/xx?a=1&b=2

POST请求:
http://xxx/xx
body:{
  "a": 1,
  "b": 2
}

为何要这个限制呢?

服务端解析一个字符串时,需要分配内存,而URL必须作为一个整体去看待,没有办法分块处理,所以必须分配一块足够大的内存空间来存储URL。
GET和POST请求区别_第3张图片
如果URL过长或者并发量过高,就很容易挤爆服务器的内存。
GET和POST请求区别_第4张图片
为了解决这个性能问题,所以各端对URL长度做了不同程度的限制,这个此案时GET请求数据有上限的原因。

POSTGET更安全?

网上经常可以看到POSTGET请求更为安全,其实是错误的,正如前面所说,在HTTP协议上,GETPOST本质上只是请求方式的不同,协议并没有做过多的限制,只是从规范上,约定俗成的更倾向于把GET请求的参数放到query中,把POST请求的参数放到body上,这样相当于GET请求的参数直接放到了URL上,如果中间带有密码信息,直观上显得并不那么安全,但从网络安全而言,querybody上的参数都是明文的,HTTP本身就是不安全的协议,请求在任何一个网络节点被劫持,内容都是透明的,况且GETPOST只是请求方式的不同,本身并不对安全起到任何作用,真正要做到安全需要双端加密,如HTTPS双端加密后,即使在任何网络节点截取到了包,也截取不到内容,这样才是本质上的安全。
GET和POST请求区别_第5张图片

你可能感兴趣的:(GET和POST请求区别)