我目前正在构建一个 Web 应用程序(使用 Zend 框架)并且已经获取了一些基本的HTTP 状态代码,例如:
- 缺少控制器/动作时出现 404
- 服务器异常 500
- Apache 返回 3xx
目前我刚刚实现了一些基本的ACL检查用户是否有权访问某个资源。它被实现为一个控制器插件,在 routeShutdown 事件上做它的事情。它的工作原理如下:
- 获取用户的角色。如果用户未登录,则分配“访客”角色
检查用户的规则是否有权访问资源
2.1。如果无权访问资源并且是访客,请保存他尝试访问的资源,并将他转发到登录提示。一旦他提供了他的凭据,他就会被重定向回原始资源(通过 HTTP 重定向状态代码)
2.2. 如果用户通过身份验证并且 ACL 拒绝他访问资源,他将被转发到错误控制器,执行我称为 noPrivilegies 的操作。
如果用户确实具有访问权限,则让请求照常继续。
现在,我的问题:
- 我可以/应该将 HTTP 401 用于 2.1 方案吗?这不像我想要客户端发送的 WWW-Authenticate 标头字段。我只需要他通过我的登录表单登录。但我仍然认为该请求不是 200 OK,因为他无法访问所请求的资源。
- 我可以/应该将 HTTP 401 用于 2.2 场景吗?同样的原因,WWW-Authenticate 也无济于事。也许最好使用 HTTP 403 Forbidden?
- 您是否为这两种情况推荐任何其他状态代码?
- 您通常会从您的应用程序中返回哪些其他状态代码,它们何时适用?