我不清楚何时应该而且不应该返回HTTP 412:Precondition Failed,Web服务错误?我正在考虑在验证数据时使用它。例如,如果客户端POST的XML数据和该数据缺少必需的数据元素,则使用412和错误描述进行响应。
这与使用HTTP 412的响应精神一致,还是应该使用其他东西(例如另一个http错误代码或Web应用程序异常)?
答案 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”元素。