用于登录成功/失败响应的正确HTTP标头?

时间:2011-08-15 11:25:08

标签: ruby-on-rails-3 apache http httpresponse

是否有使用HTTP标头进行登录成功/失败响应的标准?

4 个答案:

答案 0 :(得分:6)

服务器发送的标头是成功或失败时的200 OK或401拒绝状态代码。

参见http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html 部分 10.4.2 401未经授权

发送401时,服务器必须发送

WWW-Authenticate =“WWW-Authenticate”“:”1#challenge

表示应该使用哪种方案进行身份验证。

参见http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html 部分 14.47 WWW-Authenticate

答案 1 :(得分:1)

只有HTTP/1.0 401 Unauthorized

但最近我开发了这个“身份验证模式”:首次访问该页面时,您会获得401和登录屏幕。输入正确的登录数据后,您会收到200。当您的会话过期或单击注销时,您会再次收到401和登录屏幕。登录屏幕始终为401,每隔一页200

答案 2 :(得分:1)

这取决于“登录”的含义,也可能取决于服务器如何处理登录/注销/授权。

通常,“登录”表达式与会话相关。一个'登录',做什么需要做,然后'退出'。服务器或者存储会话信息并将会话ID发送到客户端,客户端然后将cookie发回以通知服务器会话正在进行。在会话中,变量可以改变,并且它们的状态在来自客户端的调用之间是持久的。

直观地说,当你开始一个会话时应该有一种'授权'的响应,以及响应'未授权(401)',这听起来很自然。

但是,HTTP是一种无状态协议。它不知道状态,只知道请求是否被授权。这就是为什么存在状态401但没有特定的“授权”状态代码(因为如果请求未经授权则被隐式授权)。

为了能够在HTTP级别上处理会话(不使用像PHP的session_start()那样的构造),必须在每次请求时发送授权凭证。例如,当使用.htaccess文件保护文件夹时会发生这种情况。在向密码对话框提供用户名和密码之后,每次在授权领域内存在访问时,都会发送这些用户名和密码。有一种“会话”的错觉,但实际上每次请求都会发送用户名和密码。

答案 3 :(得分:0)

对于密码等错误凭据,您发送“401”状态代码,而对于正确凭据,您在响应中发送“200”状态代码