何时以HTTP 412错误响应?

时间:2011-03-20 15:40:54

标签: rest web-services http http-status-codes http-status-code-412

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

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

3 个答案:

答案 0 :(得分:53)

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

If-Match
If-Modified-Since
If-None-Match
If-Range
If-Unmodified-Since

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

当这些前提条件失败时,通常会使用响应状态代码GET(前提条件失败)。

您的示例听起来像是无效请求(即客户端提交的数据由于缺少值而无效)。状态代码412(错误请求)更适合IMO。

答案 1 :(得分:10)

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

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

答案 2 :(得分:8)

您最好的选择是避免使用412.实际上,我使用的大多数网络服务都会发送400 code (Bad Request)。许多框架也内置了对400的支持,您的客户将会欣赏更常见的错误代码。通常情况下,特别是使用REST接口时,会返回一个带有描述的简单“message”或“error”元素。