Post,Get接口傻傻分不清?

Post,Get接口傻傻分不清?

引言

几天前和后端同事探讨接口问题。原由是他给我一个不须要任何数据提交,单纯获得数据的Post接口。引起了我对Post,Get接口的思考。
Post,Get接口是咱们最常使用的接口。那么那些彷佛约定俗成的规则又是怎么来的呢? 他们究竟哪里不一样?
下面让咱们一探究竟吧。ios

接口简介

http协议是基于tcp协议的应用层协议,tcp协议做为可靠的传输层协议,所以http协议也是可靠的。平常开发过程当中,最经常使用的是get post put delete,在http协议的规定中,这四个method属于标准的crud,分别表明了增删改查,存在着语义上的差异。数据库

  1. GET请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操做同样,只是用来查询一下数据,不会修改、增长数据,不会影响资源的内容,即该请求不会产生反作用。不管进行多少次操做,结果都是同样的。axios

  2. PUT请求是向服务器端发送数据的,从而改变信息,该请求就像数据库的update操做同样,用来修改数据的内容,可是不会增长数据的种类等,也就是说不管进行多少次PUT操做,其结果并无不一样。后端

  3. POST请求同PUT请求相似,都是向服务器端发送数据的,可是该请求会改变数据的种类等资源,就像数据库的insert操做同样,会建立新的内容。几乎目前全部的提交操做都是用POST请求的。浏览器

  4. DELETE请求顾名思义,就是用来删除某一个资源的,该请求就像数据库的delete操做。缓存

简单对比

  1. GET在浏览器回退时是无害的,而POST会再次提交请求。
  2. GET产生的URL地址能够被Bookmark,而POST不能够。
  3. GET请求会被浏览器主动cache,而POST不会,除非手动设置
  4. GET请求的参数会完整的被保存在历史记录里,POST不会。
  5. GET请求参数放在URL中,POST放在request body中。
  6. GET请求只能进行url编码,POST请求支持多种编码方式。
  7. 对于参数类型,GET只接受ASCII字符,而POST没有限制。
  8. GET请求在URL中传递的参数是有长度限制的(理论上就是url的长度),而POST没有。

主要对比点

其实咱们平时工做最多的是使用Post,Get请求。最容易产生歧义的也是这两个接口。由于两个接口每每能够达到同样的效果,因此有些小伙伴就认为他们是同样的。安全

那咱们就对比一下二者的区别:

根据HTTP规范,GET用于信息获取,并且应该是安全的,幂等的,可缓存的。服务器

根据HTTP规范,POST表示可能修改变服务器上的资源的请求。markdown

  • 【安全-safe】 此“安全”非彼安全。这里的安全指的是一个方法在本质上是只读的,那么就是安全的。客户端向服务端的资源发起的请求若是使用了是安全的方法,就不该该引发服务端任何的状态变化,所以也是无害的。
  • 【幂等-Idempotent】幂等的意思是指一个请求方法执行一次和屡次的效果彻底相同。
  • 【可缓存-Cacheable】可缓存性顾名思义就是一个方法是否可被缓存。在RFC里某些状况下的GET,POST都是可缓存的。可是绝大部分浏览器仅仅支持GET缓存。
  • 更多请参看RFC7234

深层对比点

GET和POST本质上都是TCP连接,并没有差异。因为HTTP的规定和浏览器的限制,致使他们在使用时体现出一些不一样。并发

简单来讲:

GET产生一个TCP数据包,POST产生两个数据包。对于GET请求来讲,浏览器会把HTTP header和data一并发送出去,服务器相应200即返回数据。

对于POST来讲,浏览器会先发送header,服务器相应100 continue,浏览器再发送data,服务器相应200返回数据。

下期预告

axios使用说明书,敬请期待。

相关文章
相关标签/搜索