什么是对未经授权的HTTP请求的正确回应?
我正在编写Web应用程序我不确定什么是未经授权的请求的正确答案。 对于用户来说,当服务器对302进行响应并将其重定向到登录页面时很方便。 然而,在内心深处,我认为401更正确。 如果302不会被搜索引擎误解,我也不会害怕。
那么如何回应您的未经授权的请求?
编辑
我正在使用ASP.NET MVC。 从理论的角度来看这并不重要。 但是,ASP.NET表单身份验证使用302方法。
我也喜欢用户在成功登录到他所请求的页面后重定向的行为。 我不确定这是否可以轻松实现401方法。
发送401响应,并在您返回的页面中包含登录表单。 (即不要只包含一个链接到登录页面,包括整个表单。)
我认为正确的回应完全取决于请求的内容。 在用于人类(而不是机器)消费的Web应用程序中,如果用户未通过身份验证,则更愿意重定向至登录,如果用户通过身份验证但未通过身份验证,则会显示错误页面。 我通常不会返回未经授权的响应,因为它包含的信息太少,不适合典型用户使用该应用程序。
对于Web服务,我可能会使用未经授权的响应。 由于它通常由另一端的程序使用,因此不需要提供描述性错误消息或重定向。 使用该服务的开发人员应该能够识别正确的更改,以使其代码正确使用服务 - 假设我已经用例子记录了接口的使用情况。
至于搜索引擎,正确构建的robots.txt文件可能更有用,将其限制在公共页面上。
401在语法上似乎是正确的,但是401实际上是一种提交给浏览器请求凭据的语句 - 浏览器将期望检查WWW-Authenticate头,以便它可以挑战用户输入正确的细节。
引用规范。
该请求需要用户认证。 响应必须包含一个WWW-Authenticate头域(14.47节),其中包含一个适用于所请求资源的挑战。 客户端可以用适当的授权标题字段重复请求(14.8节)。 如果请求已包含授权凭证,则401响应表明授权已被拒绝。 如果401响应包含与先前响应相同的挑战,并且用户代理至少已经尝试过一次认证,则用户应该被呈现给响应中给出的实体,因为该实体可能包含相关的诊断信息。 HTTP访问认证在“HTTP认证:基本和摘要访问认证”[43]中解释。
如果你做了302,你至少要保证用户将被引导到他们可以登录的页面,如果使用的是非标准登录。 我不会太在乎什么搜索引擎和类似的想法401。
链接地址: http://www.djcxy.com/p/71769.html上一篇: What's the correct response to unauthorized HTTP request?
下一篇: 401 Returned for every 5th call in an ASP.NET MVC application that returns JSON
