60

我不清楚什么时候应该和不应该返回 HTTP 412: Precondition Failed, error for a web service?我正在考虑在验证数据时使用它。例如,如果客户端 POST 的 XML 数据并且该数据缺少必需的数据元素,则响应 412 和错误描述。

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

4

3 回答 3

80

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

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

这些标头包含“先决条件”,允许客户端告诉服务器仅在满足某些条件时才完成请求。例如,您使用PUT请求来更新资源的状态,但您只希望在PUT资源自您最近的GET.

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

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

于 2011-03-20T15:57:32.953 回答
24

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

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

于 2011-03-20T16:47:14.810 回答
12

最好的办法是避免 412。实际上,我使用的大多数 Web 服务都会发送400 代码 (Bad Request)。许多框架也内置了对 400 的支持,您的客户会喜欢更常见的错误代码。很多时候,特别是对于 REST 接口,一个简单的“消息”或“错误”元素会返回一个描述。

于 2011-03-20T15:46:45.003 回答