Skip to main content

6. 511 需要网络认证 (Network Authentication Required)

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

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

请注意,511 响应不应该 (SHOULD NOT) 包含质询或登录界面本身,因为浏览器会将登录界面显示为与最初请求的 URL 相关联,这可能会造成混淆。

511 状态不应该 (SHOULD NOT) 由源服务器生成; 它旨在由拦截代理使用,这些代理被插入作为控制网络访问的手段。

带有 511 状态码的响应不得 (MUST NOT) 被缓存存储。

6.1. 511 状态码和强制门户 (Captive Portals)

511 状态码旨在减轻 "强制门户" 对软件 (特别是非浏览器代理) 造成的问题,这些软件期望从请求的服务器获得响应,而不是从中间网络基础设施获得响应。它并非旨在鼓励部署强制门户——只是为了限制它们造成的损害。

希望在授予访问权限之前要求一些身份验证、接受条款或其他用户交互的网络运营商通常通过使用其媒体访问控制 (MAC) 地址来识别尚未这样做的客户端 ("未知客户端")。

然后,未知客户端的所有流量都会被阻止,除了 TCP 端口 80 上的流量,该流量被发送到专门用于 "登录" 未知客户端的 HTTP 服务器 ("登录服务器"),当然还有到登录服务器本身的流量。

例如,用户代理可能连接到网络并在 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 元素将用户代理重定向到登录服务器。