微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

登录表单的HTTP状态代码正确吗?

如何解决登录表单的HTTP状态代码正确吗?

| 我正在为应用程序实施身份验证,并且正在使用具有“身份验证方法”的可插拔系统。这使我既可以实现HTTP Basic认证,又可以基于HTML认证。 使用HTTP基本/摘要身份验证,服务器将发送“ 0”响应标头。但是,根据HTTP / 1.1 RFC:   响应必须包括一个WWW-Authenticate头域(第14.47节),该头域包含适用于所请求资源的质询。 由于我不知道任何\“ html \” WWW-Authenticate标头,因此发送带有HTML登录表单的
401
似乎不合适。除此之外,还有其他选择吗?我想以RESTful方式设计我的应用程序。 基于HTML的登录表单的正确HTTP状态代码(和标头)是什么?登录失败时正确的代码是什么? 注意:我对摘要式身份验证不感兴趣。     

解决方法

对于HTML,我认为您应该回答400。 就非HTML请求而言,这也可能是正确的,因为据我所知,401的设计目的是响应对需要身份验证的内容的请求,而不是响应身份验证请求。 HTML并不总是允许纯粹使用RESTful API,因此可以在imo处四处走动,但是在这种特殊情况下也许我看不到更好的方法。     ,这个如何 ? 当请求登录页面是公共页面时,您将获得所需的内容,因此它是200状态代码:
GET /login -> 200
当请求需要您未启动的http级身份验证的页面(基本的http,ssl证书等)时,应用程序必须告知浏览器本身,它需要为您启动此身份验证:
GET /secured -> 401 with WWW-Authenticate header
当身份验证是基于cookie的会话时,您已经有一个cookie(如果不是这种情况,则在请求页面时将获得带有set-cookie标头的cookie),但是此cookie不会告诉您允许访问
/secured
uri。因此,如果您尝试访问此uri,则应获得“ 403禁止访问”状态。然后,“登录”操作不仅仅只是通过POST请求更改应用程序的状态,以使应用程序授予对此Cookie的访问权限,所以... 使用错误的凭据登录:
GET /secured -> 403 with HTML login form (with action=\"/login\")
POST /login -> 403 with HTML login form,displaying errors
使用良好的凭据但没有足够的权限登录:
GET /secured -> 403 with HTML login form (with action=\"/login\")
POST /login -> 403 with HTML page saying \"I know you are John,but you can\'t get this page\"
使用良好的凭据和足够的权限登录:
GET /secured -> 403 with HTML login form (with action=\"/login\")
POST /login -> 302 (temporary redirection to /secured)
GET /secured -> 200
    ,这是一个棘手的问题,主要是因为人们使用的最完善的HTTP客户端是浏览器。根据RFC,“ 8”标头可以包含任何内容。基本身份验证和摘要身份验证只是进一步标准化的质询/响应机制的两个示例。您只需指定诸如a9ѭ之类的挑战,然后将return1ѭ和HTML表单一起返回即可。同样,从规范中回​​想起,可以在同一个“ 8”标头中指定多个挑战,但是我没有任何使用不同方案对浏览器进行广泛测试的经验。     ,@ 2016-02-17更新
login form
http状态应为
200 OK
error
http状态最好使用
401 Unauthorized
。 (名称可能会混淆,401与身份验证有关。RFC7235   3.1。 401未经授权      401(未经授权)状态码表示该请求具有   由于缺少有效的身份验证凭据而未应用   目标资源。伺服器必须产生401回应   发送包含以下内容的WWW-Authenticate标头字段(第4.1节)   适用于目标资源的至少一项挑战。      如果请求包括身份验证凭据,则401响应指示已拒绝这些凭据的授权。用户代理可以用一个新的或替换的Authorization头域(4.2节)重复请求。如果401响应包含与先前响应相同的质询,并且用户代理已经尝试了至少一次身份验证,则用户代理应该向用户呈现随附的表示,因为它通常包含相关的诊断信息。 如果您想在没有权限的情况下进行处理,则可能需要
403 Forbidden
[RFC7231] HTTP 422用于WebDAV,但其含义可能符合需要。 (在大多数情况下不建议使用) 有关更多信息,请参见下面的ѭ17the的注释。 @ 2016-02-12更新(这是对已接受答案的引用。)
login form
http状态应为
200
error
http状态最好使用
400
。 HTTP 422用于WebDAV,但其含义可能符合需要。 HTTP 401用于授权。并且不适合身份验证。 @ 2016-02-12原始 HTTP 422现在是400/401以外的更好选择。HTTP422是替代选择。 因为这意味着服务器可以理解数据,但是对于部分数据而言并不正确。即可以向客户端显示用户名/密码不正确。   11.2。 422无法处理的实体      422(不可处理实体)状态代码表示服务器     了解请求实体的内容类型(因此     415(不受支持的媒体类型)状态码不正确),并且     请求实体的语法正确(因此为400(错误请求)     状态代码不正确),但无法处理其中的内容     说明。例如对于如果XML可能会出现此错误情况     请求正文包含格式正确(即语法正确)的内容,但     语义错误的XML指令。 RFC4918     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。