何时以HTTP 412错误响应?

TER*_*ytE 37 rest web-services http http-status-codes http-status-code-412

我不清楚你何时应该而且不应该返回HTTP 412:Precondition Failed,Web服务错误?我正在考虑在验证数据时使用它.例如,如果客户端POST的XML数据和该数据缺少必需的数据元素,则使用412和错误描述进行响应.

这与使用HTTP 412响应的精神一致,还是应该使用其他东西(例如,另一个http错误代码或Web应用程序异常)?

joe*_*ohn 58

如果查看RFC 2616,您会看到许多可用于将条件应用于请求的请求标头:

If-Match
If-Modified-Since
If-None-Match
If-Range
If-Unmodified-Since
Run Code Online (Sandbox Code Playgroud)

这些标头包含"前置条件",允许客户端告知服务器仅在满足某些条件时才完成请求.例如,您使用PUT请求来更新资源的状态,但是PUT如果资源自最近以来未被其他人修改,您只希望对其进行操作GET.

412当这些前提条件失败时,通常使用响应状态代码(Precondition Failed).

您的示例听起来像一个无效的请求(即客户端提交的数据由于缺少值而无效).400在这里IMO的状态代码(错误请求)更合适.


Jul*_*hke 11

412被保留用于请求是有条件的情况,并且不满足条件.

对于您的用例,422 Unprocessable Entity是一个很好的匹配.

  • 值得一提的是,状态代码"422"不是RFC 2616的一部分.它是WebDAV的HTTP 1.1扩展的一部分. (6认同)
  • joelittlejohn:为什么这是个问题?状态码是 RFC 2616 中的一个扩展点,这是一个非常有用的扩展。 (2认同)
  • 我不是故意暗示这是一个问题,只是值得一提:) (2认同)

Mat*_*hop 9

您最好的选择是避免使用412.实际上,我使用的大多数Web服务都会发送400代码(错误请求).许多框架也内置了对400的支持,您的客户将会欣赏更常见的错误代码.通常,特别是对于REST接口,返回带有描述的简单"消息"或"错误"元素.

  • 无论如何,客户端应该将任何未知的4xx代码视为400. (3认同)