对于存在的网页,但对于没有足够权限的用户(他们未登录或不属于正确的用户组),要提供的正确HTTP响应是什么?401?403?别的什么?到目前为止,我对每个人的看法都不太清楚.哪些用例适合每个响应?
http-status-codes http-response-codes http-headers http-status-code-403 http-status-code-401
如果用户试图访问要求用户登录的页面,则返回正确的http状态代码似乎存在很多混淆.
那么基本上当我显示登录页面时会发送什么状态代码?
我很确定我们需要使用该4xx范围内的状态代码.
我不是在谈论HTTP身份验证,所以至少有一个我们不会使用的状态代码(401 Unauthorized).
现在我们应该使用什么?答案(也在SO上)似乎有所不同:
但在状态代码的描述中是:
授权无效,请求不应重复.
嗯,这看起来不是正确的.由于授权WOULD帮助.
所以让我们看看其他答案.这里的答案甚至根本不使用4xx范围而是使用302 Found
302 Found状态代码的描述:
请求的资源暂时驻留在不同的URI下.由于重定向有时可能会被更改,因此客户端应该继续使用Request-URI来处理将来的请求.如果由Cache-Control或Expires头字段指示,则此响应仅可缓存.
我认为这也不是我想要的.因为它不是位于不同URI下的请求资源.而是一个完全不同的资源(登录页面与经过身份验证的内容页面).
所以我走了另一个解决方案令人惊讶地选择了另一个答案.
这个答案建议我们选择400 Bad Request.
此状态代码的说明是:
由于语法格式错误,服务器无法理解请求.客户端不应该在没有修改的情况下重复请求.
我认为服务器理解请求很好,但在用户通过身份验证之前拒绝提供访问权限.
另一个答案也说403答案是正确的,但它的结尾是:
如果这是一个面向公众的网站,你试图根据会话cookie拒绝访问[这就是我所做的],200使用适当的主体来指示需要登录或者302临时重定向到登录页面通常最好.
所以403是正确的,但是200或者302是最好的.
嘿! 这就是我要找的:最好的解决方案.但最好不要和正确的一样吗?为什么它会是最好的?
感谢所有在这个问题上做到这一点的人:)
我知道我不应该太担心它.而且我认为这个问题更具假设性(不是真的,而是因为缺乏一个更好的词而使用它).
但这个问题现在困扰着我一段时间了.
如果我会成为一名经理(他们总是会听到一些很酷的发音),我会说:但是,但是,但是,但是,宁静很重要.:-)
那么:the right way™在上述情况下使用状态代码是什么(如果有的话)?
TL;博士
当用户尝试访问需要登录的页面时,正确的http状态代码响应是什么?