HTTP 401 Unauthorized
需要身份验证:服务器不知道你是谁,或者你的凭据已失效。
HTTP 401 是什么意思
HTTP 401 Unauthorized 表示该请求因缺少有效的身份验证凭据而被拒绝。尽管名称如此,它关乎的是身份验证(你是谁),而不是授权(你可以做什么)——后者对应的是 403 Forbidden。
一个符合规范的 401 会包含 WWW-Authenticate 头,说明应如何进行身份验证,例如令牌类 API 使用 Bearer,经典 HTTP 身份验证使用 Basic。
401 错误的常见原因
- 根本没有发送任何凭据(缺少 Authorization 头或会话 cookie)。
- 令牌已过期、被撤销或格式错误——这是最常见的 API 原因。
- 身份验证方案错误(在期望 Bearer 令牌的地方发送了 API 密钥)。
- 已登出的会话:标签页保持打开期间,cookie 已过期或被清除。
- 时钟偏差使短期有效的 JWT 在到达时就已显得过期。
作为用户该如何修复
- 重新登录——会话很可能已经过期。
- 如果陷入循环,请清除该站点的 cookie 并重新登录。
- 检查该 URL 是否属于需要你没有的账户权限的管理或预发布区域。
作为开发者该如何修复
- 刷新或重新签发过期的令牌;在 API 客户端中实现自动令牌刷新。
- 按照期望的确切格式发送 Authorization 头(“Bearer <token>”——单词和空格都很重要)。
- 仅在缺少/无效凭据时返回 401,对权限不足的合法用户返回 403,以便客户端能够正确应对。
- 当 JWT 的“exp”校验出现意外失败时,请检查服务器的时间同步(NTP)。
示例响应
HTTP/1.1 401 Unauthorized WWW-Authenticate: Bearer realm="api", error="invalid_token", error_description="expired"
常见问题
401 和 403 有什么区别?
401 表示服务器没有你的有效凭据——请登录或刷新令牌。403 表示服务器已经知道你是谁,但仍然拒绝。
为什么我用有效令牌仍然收到 401?
常见原因:令牌过期、请求头格式错误、令牌是为其他环境或受众签发的,或服务器时钟偏差。
登录失败应该返回 401 吗?
对 API 来说是的,并会附带说明性的响应体。Web 登录表单通常改为在页面上返回带错误信息的 200。