gpt4 book ai didi

rest - 正确的需要授权的资源的http状态代码

转载 作者:行者123 更新时间:2023-12-03 05:49:50 28 4
gpt4 key购买 nike

如果用户尝试访问需要用户登录的页面,对于要返回的正确 http 状态代码似乎存在很多困惑。

那么当我显示登录页面时,基本上会发送什么状态代码?

我很确定我们需要使用 4xx 范围内的状态代码。

我在这里讨论的不是 HTTP 身份验证,因此我们至少不会使用 1 个状态代码 (401 Unauthorized)。

现在我们应该使用什么?答案(也在此处)似乎有所不同:

根据答案here我们应该使用403 Forbidden

但是在状态码的描述中是:

Authorization will not help and the request SHOULD NOT be repeated.

嗯,这看起来不太合适。因为授权会有帮助。

那么让我们看看其他一些答案。答案here Even 根本不使用 4xx 范围,而是使用 302 Found

302 Found状态代码的描述:

The requested resource resides temporarily under a different URI. Since the redirection might be altered on occasion, the client SHOULD continue to use the Request-URI for future requests. This response is only cacheable if indicated by a Cache-Control or Expires header field.

我想这也不是我想要的。因为它不是驻留在不同 URI 下的请求资源。而是完全不同的资源(登录页面与经过身份验证的内容页面)。

所以我继续选择另一个 answer令人惊讶的是还有另一种解决方案。

此答案建议我们选择400 Bad Request

该状态码的描述为:

The request could not be understood by the server due to malformed syntax. The client SHOULD NOT repeat the request without modifications.

我认为服务器很好地理解了该请求,但只是在用户经过身份验证之前拒绝授予访问权限。

另一个answer还表示 403 响应是正确的,但其结尾为:

If this is a public facing website where you are trying to deny access based on a session cookie [that's what I do], 200 with an appropriate body to indicate that log in is needed or a 302 temporary redirect to a log in page is often best.

所以 403 是正确的,但 200302 是最好的。

嘿!这就是我正在寻找的:最好的解决方案。但最好的不应该和正确的一样吗?为什么它是最好的?

感谢所有提出这个问题的人:)

我知道我不应该太担心。而且我认为这个问题更具假设性(不是真的,而是因为缺乏更好的词而使用它)。

但是这个问题已经困扰我一段时间了。

如果我是一名经理(他们只是像往常一样拿起一些听起来很酷的词)我会说:但是,但是,但是,但是休息很重要。 :-)

那么:在上述情况下(如果有的话)使用状态代码的正确方法™是什么?

tl;博士

当用户尝试访问需要登录的页面时,正确的 http 状态代码响应是什么?

最佳答案

如果用户未提供任何凭据,而您的 API 需要这些凭据,则返回 401 - 未经授权。这将挑战客户这样做。对于这种特殊情况通常很少有争论。

如果用户提供了有效的凭据,但不足以访问所请求的资源(可能这些凭据适用于免费增值帐户,但所请求的资源仅适用于您的付费用户),则您有考虑到一些 HTTP 代码定义的松散性,有几个选项:

  1. 返回403 - 禁止。这更具描述性,通常被理解为“提供的凭据有效,但仍不足以授予访问权限”
  2. 返回401 - 未经授权。如果您对安全性有偏执,您可能不想将上面 (1) 中返回的额外信息返回给客户端
  3. 返回 401403,但在响应正文中提供有用的信息,描述访问被拒绝的原因。同样,这些信息可能比您想要提供的更多,以防它对攻击者有所帮助。

就我个人而言,对于已传递有效凭据但与其关联的帐户无权访问所请求资源的情况,我始终使用#1。

关于rest - 正确的需要授权的资源的http状态代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8389253/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com