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

小弥勒 · 2017年07月18日 · 最后由 黑水 回复于 2017年07月19日 · 1399 次阅读

常规认识区别

  • 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 条回复 时间 点赞

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

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

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

jiong 回复

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

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

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册