我正在构建一个休息服务器,它将被调用以中止客户端长时间运行的进程。
/abort/{processID}
现在,如果找不到具有processID的流程,我将返回404 Not Found
但是如果进程已经完成/没有运行,那么什么是正确的HTTP错误代码呢?
406 Not Acceptable
与Accept标头相关(因此我认为我不会使用)。
400 Bad Request
似乎过于笼统。
寻求关于哪个标题最适合它的建议?
答案 0 :(得分:3)
以下是一些可能适合您的合理选项:
404
未找到410
走了409
冲突403
禁止正确的选择依赖于进程的语义已经完成/未运行:
404
或410
,具体取决于条件是否为永久性。 409
。 403
。如果该过程不再存在,您可以在404
和410
之间进行选择,具体取决于条件是否(或者是否可以确定条件是否为永久性)。
请参阅RFC 7231中的以下引语:
404
(未找到)状态代码表示原始服务器 没有找到目标资源的当前表示或是 不愿意透露那个存在。404
状态代码可以 不表明这种缺乏代表性是暂时的还是暂时的 常驻;410
(Gone)状态代码优先于404
原始服务器可能通过一些可配置的方式知道 这种情况可能是永久性的。 [...]
410
(Gone)状态代码表示对目标的访问 资源在原始服务器上不再可用,而且这个 条件可能是永久性的。如果原始服务器没有 知道,或无法确定,是否有条件 是永久性的,应该使用状态代码404
(未找到) 代替。 [...]
如果该过程存在,404
或410
不是好的选择。
如果由于与进程的当前状态冲突而无法完成中止现有进程的尝试,则应考虑409
以及描述冲突原因的有效负载。
见报价:
409
(冲突)状态代码表示请求不能 由于与目标的当前状态发生冲突而完成 资源。此代码用于用户可能的情况 能够解决冲突并重新提交请求。服务器 应该生成一个包含足够用户信息的有效负载 认识到冲突的根源。 [...]
最后一个选项是403
。当凭据有效时,此状态代码经常用于授权问题,但它们不足以授权请求。
但是403
比此更广泛,并且可用于指示由于与凭据无关的原因而禁止请求。请确保您提供的有效负载描述为什么禁止操作。
见报价:
403
(禁止)状态代码表示服务器已理解 请求但拒绝授权。希望的服务器 公开为什么禁止请求可以描述 响应有效负载中的原因(如果有的话)。如果请求中提供了身份验证凭据,则 服务器认为它们不足以授予访问权限客户端 不应该自动重复请求 证书。客户端可以用新的或不同的方式重复请求 证书。但是,出于原因可能会禁止请求 与证书无关。
希望“隐藏”当前存在的原始服务器 禁止目标资源可以用状态代码响应
404
(未找到)。