为了账号安全,请及时绑定邮箱和手机立即绑定

带有URL查询参数的HTTP POST - 好主意与否?

带有URL查询参数的HTTP POST - 好主意与否?

慕慕森 2019-07-29 10:08:19
带有URL查询参数的HTTP POST - 好主意与否?我正在设计一个API来通过HTTP,我想知道是否使用HTTP POST命令,但只使用URL查询参数而没有请求体,是一个很好的方法。注意事项:“良好的网页设计”要求通过POST发送非幂等操作。这是一种非幂等行为。当URL中存在请求参数时,更容易开发和调试此应用程序。该API不适合广泛使用。看起来像没有正文的POST请求会花费更多的工作,例如Content-Length: 0必须明确添加标题。在我看来,没有正文的POST与大多数开发人员和HTTP框架的期望有点相反。通过URL查询而不是请求主体在POST请求上发送参数是否还有任何缺陷或优势?编辑:正在考虑的原因是操作不是幂等的,并且除了检索之外还有副作用。请参阅HTTP规范:特别是,已经建立了这样的惯例:GET和HEAD方法不应该具有采取除检索之外的动作的重要性。这些方法应该被认为是“安全的”。这允许用户代理以特殊方式表示其他方法,例如POST,PUT和DELETE,以便使用户意识到正在请求可能不安全的操作。...方法也可以具有“幂等”的属性(除了错误或到期问题)N> 0个相同请求的副作用与单个请求相同。方法GET,HEAD,PUT和DELETE共享此属性。此外,方法OPTIONS和TRACE不应该有副作用,因此本质上是幂等的。
查看完整描述

3 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

如果你的行为不是幂等的,那么你必须使用POST。如果你不这样做,那你只是在寻找麻烦。 GETPUTDELETE被方法需要为幂等。想象一下,如果客户端预先提取GET您的服务的每个可能请求,您的应用程序会发生什么- 如果这会导致客户端可见的副作用,那么就会出错。

我同意发送一个POST查询字符串,但没有正文似乎很奇怪,但我认为它在某些情况下是适当的。

可以将URL的查询部分视为资源的命令,以限制当前请求的范围。通常,查询字符串用于对GET请求进行排序或过滤(例如?page=1&sort=title),但我认为在a POST上也有意义也限制了范围(也许是这样?action=delete&id=5)。


查看完整回答
反对 回复 2019-07-29
?
慕虎7371278

TA贡献1802条经验 获得超4个赞

你想要理由吗?这是一个:

Web表单不能用于向使用GET和POST混合的页面发送请求。如果将表单的方法设置为GET,则所有参数都在查询字符串中。如果将表单的方法设置为POST,则所有参数都在请求正文中。

资料来源:HTML 4.01标准,第17.13表格提交


查看完整回答
反对 回复 2019-07-29
  • 3 回答
  • 0 关注
  • 1930 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信