我已经戳了一下,但是当请求成功时我没有看到HTTP状态代码,但是在“不返回点”之后出现错误。
例如,假设您处理一个请求,它将其提交给数据库,但在返回结果时会运行内存,或遇到NPE,或者您拥有什么。它将作为200
响应,但现在,在内部,您无法返回正确,格式良好的响应。
202 Accepted
似乎不合适,因为我们已经处理了请求。
什么状态代码意味着“成功,但错误”?甚至还存在吗?
答案 0 :(得分:4)
HTTP没有这样的状态代码,但有一种最佳做法可以让您处理这种情况 - 在POST操作后重定向用户。
这是一个细分 -
因此,“保存数据但无法立即检索”的用例转换为初始POST的302重定向,然后是后续GET的500重定向。
这种方法还有其他优点 - 你摆脱了烦人的'你确定要重新提交数据吗?'信息。还可以使你的后退/前进/刷新按钮可用。
答案 1 :(得分:3)
如果服务器意识到它遇到了问题,通常应该返回5xx错误。最通用的是500 Server Error
,RFC 2616定义如下:
500内部服务器错误
服务器遇到阻止它的意外情况 完成请求。
然后,客户有责任重新尝试请求。如果先前的请求被部分提交,则服务器(或数据库)有责任将其回滚,或者适当地处理重复的事务。
答案 2 :(得分:1)
我同意@Daniel的正确回应是HTTP 500(服务器错误)。必须编写Web应用程序以在出现错误时回滚事务,而不是将事情留下半部分。
您可以在Web应用程序中利用的一点是“幂等”。这是函数(或操作)的属性,您可以根据需要多次重复它,并获得相同的结果。例如,如果读取失败,客户端可以简单地重试它直到成功。如果删除似乎失败,则客户端可以再次重试,并且无论正在删除的资源是否已经消失,服务器都会将请求视为有效。如果更新似乎失败,客户端可以重试该更新,直到从服务器成功返回。构建Web服务的REST方法大量使用幂等性来使操作在面对错误时变得健壮。