一直只是知道401和403都是拒绝访问的意思, 但没有仔细研究它们之间准确的区别, 如今详细记录一下.bash
401 Unauthorized
403 Forbidden
复制代码
从w3.org的解释来看:服务器
做为非英语国家的咱们而言, 可能不太能发觉这两个描述中的问题, 只是能看明白401是没有带认证信息或者带了错误的认证信息, 这时客户端能够修改认证信息进行重试; 而403是客户端带了正确的认证信息, 但服务器认为这个认证信息对应的用户是没有对应资源的访问权限的, 所以, 在向管理员获取相关权限以前, 是没有重试的必要的.google
但实际上这个描述中忽视了两个单词: Authorized和Authenticated.spa
这样看就很明显了, 前者指的是"用户被容许/受权作某事", 然后者只是表示"用户是认证用户".code
举个简单的例子, 在通常的后台系统中, 用户通常是经过LDAP或相似系统导入的, 也便是全部能够登陆后台系统的用户都是"Authenticated"的, 他们有本身的Credentials. 但后台系统也都会有很详细的权限管理机制, 你虽然是认证用户, 但恐怕大多数资源你仍是没法访问, 这时你就是"Unauthorized"的了.cdn
因此这样看, 401的正确解释应该是"Unauthenticated", 并且在HTTP Authentication: Basic and Digest Access Authentication
中须要带的请求头也应该是Authentication
而不是Authorization
.blog
这个是历史遗留问题了, 估计之后也不会有什么改变, 但咱们仍是须要知道这个问题, 省得在使用时混淆了401和403.资源