美文网首页
put和post

put和post

作者: 每天有趣一点点 | 来源:发表于2019-01-29 15:04 被阅读25次

1. 有啥区别?

put和post的技术实现上没有很大区别,区别主要体现在协议语义上。

2. 为什么遵守?

如果只有语义上的区别,那么不遵守有什么问题呢?

规范带来的好处是很多的,就像是开发人员的语言一样,当大家遵守同样的规范,沟通才更容易,不至于导致出现问题。公司内部还行,但是如果牵涉到外部工具或者其他公司开发合作,那还是会有问题的。举个比较严重的例子。chrome浏览器为了加快页面加载,会在页面预加载某些GET链接(跳转链接,非资源链接),这样用户点那个链接时,加载速度就很快。有一个图片网站,使用GET请求,参数里面有个OPT用来表示动作。用户打开页面时,嵌入了OPT=“DEL”的链接在图片附近的表单中,然后就被Chrome删除了。再举个其他可能接触的例子。公司可能使用工具解析client请求,来分析请求的分布等信息。如果client的User-Agent字段没有遵守协议标准,那么工具将无法正确统计,这样的例子很多。标准的存在意义就是为了统一概念,这样即使从未见面的人,各个国家不同语种的人,甚至火星人也能轻松交流。

3. 什么区别?

HTTP协议使用的是URI,是一种资源标志,那么对应的HTTP Verb就是各种对资源的操作,GET,PUT,DELETE等,明确这些,再往下看。

3.1PUT

client对一个URI发送一个Entity,服务器在这个URI下如果已经有了一个Entity,那么此刻服务器应该替换成client重新提交的,也由此保证了PUT的幂等性。如果服务器之前没有Entity ,那么服务器就应该将client提交的放在这个URI上。总结一个字:PUT,PUT的方法就是其字面表意,将client的资源放在请求URI上。对于服务器到底是创建还是更新,由服务器返回的HTTP Code来区别。注:通过上面可以知道,如果用PUT来达到更改资源,需要client提交资源全部信息,如果只有部分信息,不应该使用PUT(因为服务器使用client提交的对象整体替换服务器的资源)。

3.2 POST

这个Verb是比较特殊。不同于一般的增删改,使用场景比较多。根据RFC文档上描述,有以下几个场景:对现有资源的注解;向公告板、邮件群组、文章群组中提交消息;提交一个数据块(就像表单提交的结果),到数据处理过程;通过附加操作扩展数据库。

因为服务器实现POST是不可预知,所以将其定义为不安全、不幂等的Verb。基本上不能方便的归纳为“增删改”之类的行为,都可以使用POST方法;另外可以使用POST去实现“部分更新资源”。

相关文章

  • put和post

    1. 有啥区别? put和post的技术实现上没有很大区别,区别主要体现在协议语义上。 2. 为什么遵守? 如果只...

  • POST 和 PUT 的区别

    PUT 和 POST 都有更改指定 URI 的语义,但 PUT 被定义为 idempotent 的方法,POST ...

  • p_网络工具类

    1.post、put、patch:与幂等性总:用于上传数据的方法只有POST、PUT、PATCH。PUT方法和PA...

  • HTTP协议中PUT和POST使用区别

    摘要: PUT是idempotent的方法,而POST不是。 原文:HTTP协议中PUT和POST使用区别 作者:...

  • REST Style中的POST和PUT

    REST风格使用HTTP协议原生的GET、PUT、POST、DELETE方法表示动作,其中PUT和POST方法的确...

  • put 和post 区别

    POST /uri 创建 DELETE /uri/xxx 删除 PUT /uri/xxx更新或创建 GET /ur...

  • POST与PUT区别?

    PUT和POST都有更改指定URI的语义.但PUT被定义为idempotent的方法,POST则不是 idempo...

  • PUT or POST

    有的观点认为,应该用POST来创建一个资源,用PUT来更新一个资源;并且在实际工作中这种观点也确实使用了很多,但其...

  • HTTP协议简介

    HTTP协议简介POST,PUT和PATCH的区别

  • restful风格

    get(获取)、post(添加)、delete(删除).put(修改) 表单中,提交方式只有get和post,所以...

网友评论

      本文标题:put和post

      本文链接:https://www.haomeiwen.com/subject/adyxsqtx.html