跳到主要内容

6. 511 Network Authentication Required

511 状态码表示客户端需要进行认证才能获得网络访问权限.

响应表示应当包含指向某个资源的链接, 该资源允许用户提交凭据 (例如通过 HTML 表单).

请注意, 511 响应不应包含 challenge 或登录界面本身, 因为浏览器会显示该登录界面与原始请求的 URL 相关联, 这可能导致混淆.

511 状态不应由源服务器生成; 它旨在供拦截代理使用, 这些代理被置于通信路径中, 用作控制网络访问的手段.

带有 511 状态码的响应禁止由缓存存储.

6.1. 511 状态码和强制门户

511 状态码旨在缓解 "captive portals" (强制门户) 给软件造成的问题, 尤其是那些期待从请求目标服务器而非中间网络基础设施接收响应的非浏览器代理. 它并非鼓励部署强制门户, 而只是限制其造成的损害.

希望在授予访问权限前要求某种认证, 接受条款或其他用户交互的网络运营者, 通常会使用客户端的 Media Access Control (MAC) 地址识别尚未完成这些操作的客户端 ("unknown clients").

随后, 未知客户端的所有流量都会被阻止, 但 TCP 端口 80 上的流量除外; 这些流量会被发送到一个专门用于让未知客户端 "logging in" 的 HTTP 服务器 ("login server"), 当然也包括发往登录服务器本身的流量.

例如, 用户代理可能连接到网络并在 TCP 端口 80 上发出以下 HTTP 请求:

GET /index.htm HTTP/1.1
Host: www.example.com

收到此类请求后, 登录服务器会生成 511 响应:

HTTP/1.1 511 Network Authentication Required
Content-Type: text/html

<html>
<head>
<title>Network Authentication Required</title>
<meta http-equiv="refresh"
content="0; url=https://login.example.net/">
</head>
<body>
<p>You need to <a href="https://login.example.net/">
authenticate with the local network</a> in order to gain
access.</p>
</body>
</html>

这里, 511 状态码确保非浏览器客户端不会将该响应解释为来自源服务器, 而 META HTML 元素会将用户代理重定向到登录服务器.