接口和协议组成 关于 get 与 post 区别的一点小看法

小弥勒 · July 18, 2017 · Last by 黑水 replied at July 19, 2017 · 1204 hits

常规认识区别

  • get 参数通过url传递 post需要把参数放到request body中,所以post相对安全性较高
  • get 的参数只接受ascii字符,post没有限制
  • get请求只能进行url编码,post没有限制
  • get请求会被浏览器主动cache,而post则需要手动设置
  • get请求可以被bookmark ,post则不可以
  • get 请求在url中传送的参数有限制,这个需要说明一下,并不是get本身限制url的参数长度,这只是大多数浏览器的限制(2k)和服务器的限制(64k)

等等 ,可能还有很多,以下是我想从tcp的角度来分析一些区别,如果不正确请各位大神指正

无论是get和post或者其他httpmethod , 本质上都是都是tcp连接,get和post能做的事情其实是一样的,也就是说要给get加上request body或者给post带上url参数在技术上是完全行得通的,但要看服务器是否会处理get请求的request body
而有一个重要的区别可能在于大部分浏览器 get产生一个tcp数据包,而post产生两个tcp包(火狐浏览器在post请求是只产生1个tcp包),过程是首先将header发送到服务器,等待服务器响应100时,再发送data
所以在响应时间上,post要消耗的多一点,但在现在的网络环境下基本上可以忽略,也并不建议使用get来替换post来提高性能,因为get和post各有各的用处,配合使用才是最优的方案。

纯小白,有错误请指正

共收到 5 条回复 时间 点赞

1、post并非安全性就更高了,只是传递的值的方式不同,个人理解。

jiong 回复

这个可能是我理解的太表面了,只看到了get直接暴露了参数,而且比较的是当两种方法做相同的操作,但既然http规定了两种方法的使用规范,按照规范去做好像post并没有比get更安全

请查阅RESTful API 设计中HTTP动词的用法,同时推荐阅读状态码的含义

现在几乎在用https 更安全些,选用post居多

了解设计、标准,看 RFC 。实际实现时,怎么做的都有。
很多不同是因为服务端和浏览器的实现,并不一定符合 RFC ,服务端框架和浏览器对 HTTP 的实现也是随着版本更迭在变化。

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up