首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在服务器发生第三方故障时返回哪个http状态代码

在服务器发生第三方故障时返回哪个http状态代码
EN

Stack Overflow用户
提问于 2019-11-14 16:33:41
回答 3查看 338关注 0票数 0

我有一个场景,我们有一个Azure多租户应用程序。客户允许我们的服务与Azure AD对话,并使用授予我们的多租户应用程序的授权代码流从他们的Azure AD租户中搜索(用户/AD组)数据。

将Azure AD设置用户登录到我们的UI并尝试从他们的AAD租户中搜索用户/组。我们的服务使用授予多租户应用程序的授权来调用AAD。

现在,如果客户的AAD管理通过登录到AAD控制台来删除对我们AAD多租户应用程序的访问,那么当我们的服务试图调用AAD API来搜索用户时,AAD开始抛出http 403(禁止)。

对于这个特定的场景,应该将哪些http状态代码返回给UI?我们想通知用户这一点,以便他们可以恢复我们的多租户应用程序的授权。

我不认为返回http 4xx是个好主意。如果我们从UI预期中看到这不是客户端错误。

我认为这是某种服务器错误。我们的AAD连接服务因缺乏授权而中断。

请建议一个合理的http状态代码从5xx系列或4xx系列为本方案。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-11-14 18:43:34

状态代码的4xx (客户端错误)类表示客户端似乎出错了。除非响应HEAD请求,否则服务器应该发送一个表示,其中包含错误情况的解释、以及它是临时的还是永久性的。

有效载荷是向最终用户传达实际问题的主要方式。

HTTP状态代码是元数据;目标受众是参与消息交换的通用组件。在网络上,有效载荷是人类的,状态码是浏览器,缓存,蜘蛛等等。

在你的情况下,请求是可以的。特别是,客户端不能做任何事情来改善结果。所以4xx应该不在桌子上。

状态代码的5xx (服务器错误)类表示服务器知道它已经错误或无法执行请求的方法。

5xx类的状态代码比4xx类不那么具体(主要是因为其他组件无法采取纠正措施)。

您可以选择的实际选项是:

  • 500内部服务器错误
  • 503服务不可用

服务不可用很有趣,因为它定义了一系列重试语义;您可以与通用组件通信,估计问题何时修复,然后这些组件可以判断如何处理这些信息。

503 (服务不可用)状态代码表示服务器目前由于临时重载或计划维护而无法处理请求,这很可能在延迟之后得到缓解。

因此,如果你认为你可以在事情恢复之前估计延迟,那么503可能是有意义的。

500 (内部服务器错误)状态代码表示服务器遇到了无法满足请求的意外情况。

这是一个非常令人满意的选择。“我们现在出乎意料地崩溃了”。

同样,5xx响应的有效负载可以用于向客户端传递更具体的语义。

票数 1
EN

Stack Overflow用户

发布于 2019-11-14 16:37:14

你应该和4xx保持联系。

HTTP 403是一种标准的HTTP状态代码,由HTTP服务器与客户端通信,以指示客户端出于某种原因禁止访问所请求的(有效的)网址。

票数 0
EN

Stack Overflow用户

发布于 2019-11-14 17:04:08

最后,您的应用程序达到不允许当前用户执行某些操作的状态。根据您的普通用户的技术熟练程度,您可以或多或少地向她提供技术信息。因为你似乎能够定义什么是特别的错误,你有机会告诉用户关于它和她应该如何反应。在我看来,不需要HTTP代码。将它提供给用户并没有真正的好处(除了她是技术熟练的)。因此,我会在UI中给出一个很好的解释(可能是一个小字体的文本,它保存着HTTP代码)。但这只是我的看法,我会怎么做。

最后,这也取决于您使用软件实现的业务流程。因此,,我建议您向负责软件背后业务部分的人员(如产品负责人)提出您的问题。如果你有这样的想法的话,问问你的用户体验设计师也是个好主意。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58861584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档