进程未运行的最佳HTTP错误代码?

时间:2017-09-11 10:42:08

标签: http http-status-codes

我正在构建一个休息服务器,它将被调用以中止客户端长时间运行的进程。

/abort/{processID}

现在,如果找不到具有processID的流程,我将返回404 Not Found

但是如果进程已经完成/没有运行,那么什么是正确的HTTP错误代码呢?

406 Not Acceptable与Accept标头相关(因此我认为我不会使用)。

400 Bad Request似乎过于笼统。

寻求关于哪个标题最适合它的建议?

1 个答案:

答案 0 :(得分:3)

简短回答

以下是一些可能适合您的合理选项:

  • 404未找到
  • 410走了
  • 409冲突
  • 403禁止

正确的选择依赖于进程的语义已经完成/未运行

  • 如果该过程不再存在,请考虑404410,具体取决于条件是否为永久性。
  • 如果可以找到具有给定ID的进程,但由于与进程的当前状态冲突而无法完成中止此进程的尝试,则可以转到409
  • 如果出于其他原因禁止操作,请选择403

该过程不再存在

如果该过程不再存在,您可以在404410之间进行选择,具体取决于条件是否(或者是否可以确定条件是否为永久性)。

请参阅RFC 7231中的以下引语:

  

6.5.4. 404 Not Found

     

404(未找到)状态代码表示原始服务器   没有找到目标资源的当前表示或是   不愿意透露那个存在。 404状态代码可以   不表明这种缺乏代表性是暂时的还是暂时的   常驻; 410(Gone)状态代码优先于404   原始服务器可能通过一些可配置的方式知道   这种情况可能是永久性的。 [...]

  

6.5.9. 410 Gone

     

410(Gone)状态代码表示对目标的访问   资源在原始服务器上不再可用,而且这个   条件可能是永久性的。如果原始服务器没有   知道,或无法确定,是否有条件   是永久性的,应该使用状态代码404(未找到)   代替。 [...]

该过程存在,但操作导致冲突

如果该过程存在,404410不是好的选择。

如果由于与进程的当前状态冲突而无法完成中止现有进程的尝试,则应考虑409以及描述冲突原因的有效负载。

见报价:

  

6.5.8. 409 Conflict

     

409(冲突)状态代码表示请求不能   由于与目标的当前状态发生冲突而完成   资源。此代码用于用户可能的情况   能够解决冲突并重新提交请求。服务器   应该生成一个包含足够用户信息的有效负载   认识到冲突的根源。 [...]

该过程存在,但由于某种原因禁止该操作

最后一个选项是403。当凭据有效时,此状态代码经常用于授权问题,但它们不足以授权请求。

但是403比此更广泛,并且可用于指示由于与凭据无关的原因而禁止请求。请确保您提供的有效负载描述为什么禁止操作。

见报价:

  

6.5.3. 403 Forbidden

     

403(禁止)状态代码表示服务器已理解   请求但拒绝授权。希望的服务器   公开为什么禁止请求可以描述   响应有效负载中的原因(如果有的话)。

     

如果请求中提供了身份验证凭据,则   服务器认为它们不足以授予访问权限客户端   不应该自动重复请求   证书。客户端可以用新的或不同的方式重复请求   证书。但是,出于原因可能会禁止请求   与证书无关。

     

希望“隐藏”当前存在的原始服务器   禁止目标资源可以用状态代码响应   404(未找到)。