当前位置:  开发笔记 > 前端 > 正文

为什么使用HTTP PUT和DELETE方法而不是POST?

如何解决《为什么使用HTTPPUT和DELETE方法而不是POST?》经验,为你挑选了3个好方法。

优点主要是语义,也可以在一定程度上简化URL.不同的HTTP方法映射到不同的操作:

POST   => create a new object
DELETE => delete an object
PUT    => modify an object
GET    => view an object

然后,理论上,您可以使用相同的 URL,但使用不同的方法与它进行交互; 用于访问资源的方法定义了实际的操作类型.

但实际上,大多数浏览器只支持HTTP GET和POST.Rails使用HTML表单中的一些"技巧"来表现就好像发送了PUT或DELETE请求一样,即使Rails仍在使用GET或POST这些方法.(这解释了为什么你可能没有在其他平台上使用DELETE或PUT.)



1> mipadi..:

优点主要是语义,也可以在一定程度上简化URL.不同的HTTP方法映射到不同的操作:

POST   => create a new object
DELETE => delete an object
PUT    => modify an object
GET    => view an object

然后,理论上,您可以使用相同的 URL,但使用不同的方法与它进行交互; 用于访问资源的方法定义了实际的操作类型.

但实际上,大多数浏览器只支持HTTP GET和POST.Rails使用HTML表单中的一些"技巧"来表现就好像发送了PUT或DELETE请求一样,即使Rails仍在使用GET或POST这些方法.(这解释了为什么你可能没有在其他平台上使用DELETE或PUT.)


实际上,它非常简单.当使用Rails的方法生成表单时,如果指定PUT或DELETE,Rails实际上会POST表单,但它在表单中包含一个指定所需HTTP方法的隐藏字段.然后,在处理表单时,Rails会查找该隐藏字段,如果存在,它会(通过请求对象)报告表单是使用DELETE或PUT发送的,即使它确实是使用POST发送的.所以基本上,如果你指定DELETE,request.method会返回:delete,即使表单是POST.这一切都是自动发生的.
@Jazz:因为它实际上会接受PUT和DELETE,如果你可以提供它们,但是对那些不能的东西(比如浏览器)做出回应.

2> Hank Gay..:

这是HTTP 1.1规范的"方法"部分 ; 它定义了许多方法,它们都有不同的好处和权衡.POST是最灵活的,但权衡很多:它不可缓存(因此互联网的其余部分无法帮助您扩展),它不安全或幂等,因此客户端不能只重新发送它会出错,并且它不再清楚你要完成的是什么(因为它非常灵活).我确信还有其他人,但这应该足够了.考虑到所有这些,如果HTTP规范定义了一个完全符合您的请求要求的方法,则没有理由发送POST.

原因POST是如此普遍,至少在历史上,Web浏览器仅支持GETPOST.由于GET被定义为安全且幂等(即使许多应用程序不遵守),修改数据的唯一安全方法是发送数据POST.随着AJAX和非浏览器客户端的兴起,这已不再适用.

顺便说一下,@ mipadi给出的映射是标准映射,但它不是唯一有效的映射.例如,Amazon S3用于PUT创建资源.使用的唯一原因POST是,如果客户端没有足够的知识来创建资源,例如,您使用关系数据库备份资源并使用人工代理键​​.


在失败时重试; 如果你没有获得'ack`,你可以再次发送它 - 它保证与第一个工作时没有什么不同.

3> Josh..:

当你可以将其内容设置为零字节并且文件系统将其视为删除时,这有点像问为什么"删除"文件.HTTP一直支持除GET/POST以外的动词,但SOAP演变的方式有点扭曲了这些动词的原始含义.REST是一种更简单的回归基础方法,它使用动词,而不是在有效载荷内部发明一些新的动词概念.

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有