HTTP/1.1 认证方式概览
HTTP 协议本身是无状态的,为了保障资源访问安全,常见的认证机制包括 BASIC(基本)、DIGEST(摘要)、SSL 客户端认证以及表单认证。
BASIC 认证
这是最基础的认证方式。当客户端请求受保护资源时,服务器会返回 401 Unauthorized 状态码,并在响应头中携带 WWW-Authenticate 字段,提示需要认证。
GET /private/http/1.1 Host: hack.jp
HTTP/1.1 401 Authorization Required
WWW-Authenticate: Basic realm="Input your ID and password"
收到挑战后,客户端将用户名和密码用冒号连接,进行 Base64 编码,随后放入 Authorization 请求头再次发送。
GET /private/http/1.1 Host: hack.jp
Authorization: Z3Vlc3Q6Z3Vlc3Q=
服务端解码后验证凭据,通过则返回资源,否则继续拒绝。注意:这种方式并未加密密码内容,仅做了编码处理,传输过程中容易被截获,安全性较低。
DIGEST 认证
为了解决明文传输风险,DIGEST 认证引入了质询 - 响应机制。它不直接发送密码,而是利用随机数(nonce)和哈希算法计算摘要。
- 发起请求:客户端先尝试访问资源。
- 服务器挑战:服务器返回 401 状态,并在
WWW-Authenticate中提供 nonce(随机数)、realm、算法(如 MD5)等信息。
HTTP/1.1 401 Authorization Required
WWW-Authenticate: Digest realm="DIGEST", nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", uri="/digest/", algorithm=MD5, qop="auth"
- 计算响应:客户端使用收到的 nonce、用户名、密码、请求方法(Method)及 URI 路径,按特定规则计算
response值。
GET /digest/http/1.1 Host: hack.jp
Authorization: Digest username="guest", realm="DIGEST", nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", uri="/digest/", algorithm=MD5, qop=auth, response="6629fae49393a05397450978507c4ef1", cnonce="0a4f113b", nc=00000001
- 服务端校验:服务器根据用户名查找对应密码,执行相同的计算逻辑得出期望的
request-digest,并与客户端传来的response比对。一致则认证成功,并可能返回Authentication-Info头部供客户端验证服务器身份。
SSL 客户端认证
这种机制要求客户端安装数字证书。流程如下:
- 服务器收到请求后,返回
Certificate Request报文。 - 客户端选择证书并通过
Client Certificate报文发送。 - 服务器验证证书有效性,提取公钥建立 HTTPS 通信。
通常这不会单独使用,而是与表单认证结合形成双因素认证:证书验证设备身份,密码验证用户本人。
表单认证
Web 应用中最常见的模式,依赖 Cookie 管理会话(Session)。
- 提交凭证:用户通过表单输入账号密码,通常以 POST 方式提交至服务器。
- 生成 Session:服务器验证通过后,在本地创建会话记录,生成唯一的 Session ID。


