我会选择409: Conflict
,因为您拥有的是对资源状态的违反。
405: Method Not Allowed
也可以。如果您想使用 a 405
,您必须发送一个Allow
标头来指示支持的方法,并且支持的方法会因资源的状态而异。在我看来,此响应代码非常适合只读资源、无法删除的资源等,但Darrel对这篇文章的评论是有效的。规范不明确:
Request-URI 所标识的资源不允许使用 Request-Line 中指定的方法。响应必须包含一个 Allow 标头,其中包含所请求资源的有效方法列表。
无论哪种情况,您都应该在响应正文中提供信息,以便客户端了解错误的来源。
关于提到的其他两种方法:
403: Forbidden
当您没有适当的权限来修改资源时应该使用,即如果您必须是管理员才能删除该资源而您不是。
412: Precondition Failed
主要用于条件请求,其中先决条件在请求标头中明确指定。例如,您可以有条件 PUT 请求,这些请求仅应在If-Match
标头有效时执行。如果您未在请求标头中指定任何内容,我仍然会选择 409 而不是 412。这是 412 的规范:
在服务器上测试时,一个或多个请求标头字段中给出的前提条件评估为假。此响应代码允许客户端对当前资源元信息(标头字段数据)设置先决条件,从而防止将请求的方法应用于预期之外的资源。