错误 403 的 HTTP 规范中的“授权无济于事”是什么意思?

Cam*_*tin 5 authentication standards http http-status-code-403 http-status-code-401

HTTP 1.1规范说:

10.4.4 403 禁止

服务器理解请求,但拒绝满足它。
授权无济于事,不应重复该请求。[...]

这是否仅意味着“基本授权”,如WWW-Authenticate: Basic?对于某些其他用户可能通过基本 HTTP 身份验证以外的方式(例如通过他的会话 cookie、OpenID 等)访问被拒绝资源的资源,是否应该发出 403?

我问这个是因为 HTTP 401 说...

响应必须包含一个WWW-Authenticate header字段

...我不确定我是否真的应该添加一个像WWW-Authenticate: Custom.

许多人似乎使用 403,即使在一个简单的 cookie 可以使资源可用的情况下也是如此。他们都错了吗?

Erg*_*wun 3

我相信你是对的,无论授权如何,当请求被拒绝时应该使用 403。一个示例用法是阻止目录浏览,如下所述:

http://www.checkupdown.com/status/E403.html

当然,人们很可能在应该使用 401 的地方错误地使用了它。

401 和 403 之间的差异也在另一个 SO 问题中讨论,其中共识是401 是针对身份验证错误,而403 是针对授权错误

身份验证与授权的问题可能会有点令人困惑,特别是当规范说:

10.4.2 401 未经授权

该请求需要用户身份验证。

我认为关键的区别是:

  • 401表示您未获得授权,因为您没有正确的身份验证
  • 403表示无论身份验证如何,您都未获得授权。

  • 据我了解,如果您的 IP 地址、用户代理或您不合理期望更改的其他内容的访问被拒绝,403 也适用。401 表示“使用正确的凭据重试”;403的意思是“走开,我不喜欢你”。 (2认同)