如何解决为过程有问题但不是异常的请求更正HTTP状态代码
该方案是客户端将请求删除表中的项目,但该项目已被删除,尚未物理删除,因此不是“找不到”。可能是200,但尚未删除。大约在200到500之间。
返回要求完成某件事的请求,但未成功完成(所以不是200),但没有例外(不是500)。
解决方法
如果您正在对不存在的资源进行请求,则仍然可以仅使用404 Not Found
。是否将某些内容“物理删除”与客户无关。
如果您知道它已被删除并且永远不会回来,那么410 Gone
也很合适
状态代码属于transfer documents over a network域;您想从通用文档传输语义而非特定于您的实现的角度来考虑它们。
不安全的idempotent方法的有趣特征之一是,从某种意义上说,它们是声明性的-“使资源像这样”。如果资源已经处于所需状态,则可以返回成功响应以指示该情况。
在RFC 7232中对此进行了明确说明,讨论了If-Match标头的含义:
如果收到的If-Match条件评估为false,则原始服务器不得执行请求的方法;相反,如果原始服务器已确认请求了状态更改且最终状态已经为原状态,则原始服务器必须使用以下两种方式之一响应:a)412(失败的前提条件)状态代码或b)2xx(成功)状态代码之一。反映在目标资源的当前状态中(即,用户代理请求的更改已经成功,但是用户代理可能不知道它,可能是因为先前的响应丢失了,或者其他人进行了兼容的更改用户代理)。
从根本上讲,HTTP并不限制服务器执行(实现),而仅约束消息表示(语义)的内容。对于No-Op,返回带有成功代码的消息具有完全令人满意的含义,并且特别是(在符合标准的客户端中)准确地诱导了我们想要的响应类型。
当不安全的请求更改资源但不是以预期的方式更改资源时,成功代码也可能适用。同样,服务器对自己的实现拥有权限,我们最感兴趣的是将什么信息传达给客户端。
作为示例,我提交了退款请求。我期望的意思是我的请求进入了“已批准”状态,但是如果开始执行某些业务规则,它可能会转换为“正在审核”状态。我仍然希望收到2xx状态码,即使服务器没有执行“我想要的操作”,因为该消息已被接收并已采取措施,并且我先前缓存的所涉及资源的副本为no longer valid。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。