客户端只有在拿到可解析的完整 HTTP 响应之后,才能对代理的认证挑战采取行动。状态行和 Proxy-Authenticate 字段仍然需要那个结束头字段区块的空行。

一个不带正文的最小 HTTP/1.1 响应具有如下结构:

HTTP/1.1 407 Proxy Authentication Required<CRLF>
Proxy-Authenticate: Basic realm="local-proxy"<CRLF>
Content-Length: 0<CRLF>
<CRLF>

每个 CRLF 标记代表回车和换行字节,而不是字面上的标记文本。最后一个头字段行本身已经以 CRLF 结尾,额外的 CRLF 才构成空行。Content-Length 表明后面没有正文。

在等待下一个请求之前,先发送或刷新完整的响应。在原始套接字上,还要考虑实际写入字节数少于请求值的情况。

407 至少需要一个适用的 Proxy-Authenticate 挑战。如果客户端支持所提供的方式并取得凭据,就可以用 Proxy-Authorization 重试。网站的 401 和 WWW-Authenticate 字段涉及的是另一跳。

这个 Basic 挑战只是分帧示例,并不是完整的认证设计。当需要保密时,Basic 凭据必须走受保护的连接。发送挑战同样不实现口令校验、请求解析或 CONNECT 隧道。

相关文章