我不清楚什么时候应该返回HTTP 412:Precondition Failed,error for a web service?我正在考虑在验证数据时使用它。例如,如果客户端POST的XML数据缺少所需的数据元素,则返回412和错误描述。这是否符合HTTP 412响应的精神,或者应该使用其他东西(例如另一个http错误代码或Web应用程序异常)?
dddzy1tm1#
如果你看一下RFC 2616,你会看到许多请求头,可以用来对请求应用条件:
If-Match If-Modified-Since If-None-Match If-Range If-Unmodified-Since
这些头包含“先决条件”,允许客户端告诉服务器只有在满足某些条件时才完成请求。例如,您使用PUT请求来更新资源的状态,但您只希望在资源自最近的GET以来没有被其他人修改时才对PUT进行操作。响应状态代码412(Precondition Failed)通常在这些先决条件失败时使用。您的示例听起来像是一个无效的请求(即客户端提交了由于缺少值而无效的数据)。在IMO中,状态代码400(Bad Request)更合适。
PUT
GET
412
400
slwdgvem2#
412是为请求是有条件的情况而保留的,并且条件不满足。对于您的用例,422 Unprocessable Entity是一个很好的匹配。
lf5gs5x23#
你最好的选择是避免412。在实践中,我使用过的大多数Web服务都发送400 code (Bad Request)。很多框架也内置了对400的支持,你的客户会喜欢更常见的错误代码。通常情况下,特别是对于REST接口,一个简单的“message”或“error”元素会返回一个描述。
j91ykkif4#
出现此问题是由于以下HTTP标头
首先通过以下代码检查当前请求的这些HTTP头值public void service(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse)抛出ServletException,IOException {
Enumeration<String> enumeration = httpServletRequest.getHeaderNames(); while (enumeration.hasMoreElements()) { String name = (String) enumeration.nextElement(); System.out.println(name +" === "+httpServletRequest.getHeader(name)); }
这将看起来像以下。
获取这些HTTP头值后,将这些HTTP头值更改为处理请求并处理412 HTTP代码错误
4条答案
按热度按时间dddzy1tm1#
如果你看一下RFC 2616,你会看到许多请求头,可以用来对请求应用条件:
这些头包含“先决条件”,允许客户端告诉服务器只有在满足某些条件时才完成请求。例如,您使用
PUT
请求来更新资源的状态,但您只希望在资源自最近的GET
以来没有被其他人修改时才对PUT
进行操作。响应状态代码
412
(Precondition Failed)通常在这些先决条件失败时使用。您的示例听起来像是一个无效的请求(即客户端提交了由于缺少值而无效的数据)。在IMO中,状态代码
400
(Bad Request)更合适。slwdgvem2#
412是为请求是有条件的情况而保留的,并且条件不满足。
对于您的用例,422 Unprocessable Entity是一个很好的匹配。
lf5gs5x23#
你最好的选择是避免412。在实践中,我使用过的大多数Web服务都发送400 code (Bad Request)。很多框架也内置了对400的支持,你的客户会喜欢更常见的错误代码。通常情况下,特别是对于REST接口,一个简单的“message”或“error”元素会返回一个描述。
j91ykkif4#
出现此问题是由于以下HTTP标头
首先通过以下代码检查当前请求的这些HTTP头值
public void service(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse)抛出ServletException,IOException {
这将看起来像以下。
获取这些HTTP头值后,将这些HTTP头值更改为处理请求并处理412 HTTP代码错误