代码之家  ›  专栏  ›  技术社区  ›  PatrikAkerstrand

在web应用程序中使用HTTP状态代码

  •  2
  • PatrikAkerstrand  · 技术社区  · 15 年前

    我目前正在构建一个web应用程序(利用Zend框架),并获得了一些基本的 HTTP status 关闭代码,例如:

    • 404关于缺少控制器/操作
    • Apache返回3xx

    目前,我刚刚实现了一些基本功能 ACL 检查用户是否有权访问特定资源。它被实现为一个 controller plugin ,在routeShutdown事件中做自己的事情。它的工作原理如下:

    1. 获取用户的角色。如果用户未登录,请分配“来宾”角色
    2. 检查用户的规则是否有权访问资源

      2.1. 如果 拥有对资源的访问权限并且是来宾,保存他试图访问的资源,并将他转发到登录提示符。一旦他提供了他的凭证,他就会被重定向回原始资源(通过HTTP重定向状态代码)

      2.2. 如果用户经过身份验证,ACL拒绝他访问资源,他将被转发到错误控制器,执行我称为NoPrivileges的操作。

    现在,我的问题是:

    1. 我可以/应该在2.1场景中使用HTTP 401吗?
    2. 我可以/应该在2.2场景中使用HTTP 401吗? 同样的原因,WWW认证也没用。也许使用HTTP 403更好?
    3. 对于这两种情况,您是否建议使用其他状态代码?
    4. 您通常从应用程序返回哪些其他状态代码
    5 回复  |  直到 15 年前
        1
  •  2
  •   kdgregory    15 年前

    我认为403是正确的回答。根据 HTTP spec ,401用于可能且需要HTTP级别身份验证的情况,403用于用户无权访问资源的情况。就你的应用而言,用户已经登录,期望他/她能够使用不同的帐户是不合理的。

        2
  •  2
  •   Dave Sherohman    15 年前
    1. 如果允许来宾角色执行某些操作,则在流程的第2.1阶段不保证4xx响应或其他形式的错误,因为未登录不是错误。

    2. 401和403对于应用程序级别的“权限被拒绝”来说都不是理想的选择,但我会说,将401的“响应必须包含WWW身份验证头字段”与403的“授权将没有帮助”进行权衡(我迄今遇到的大多数情况似乎都同意)如果您在继续之前请求HTTP级别的身份验证,那么401是合适的响应,而403在所有其他情况下都是合适的。你的情况可能是403。

        3
  •  1
  •   Noon Silk    15 年前

    通常我从不使用状态代码报告“应用程序”级身份验证失败。这通常是通过应用程序报告的。

    这样做是有道理的;因为他们 可以 从“http”意义访问“页面”;如果这有意义的话,他们就是无法访问您的应用程序处理该页面。

    不过,这只是我的看法。

        4
  •  1
  •   Bob    15 年前

    您还可以将http响应中的原因短语设置为表示失败原因的内容。

        5
  •  1
  •   ZZ Coder    15 年前

    即使在HTTP规范中没有明确说明,通常的做法是

    401-用于验证错误 403-用于授权错误