407 Proxy Authentication Required
用法
收到 407 Proxy Authentication Required 错误时,客户端明白在通过代理访问所请求的资源之前,需要提供有效的登录凭据。这类似于 401 Unauthorized 响应,客户端使用相同的认证协议。
服务器返回 Proxy-Authenticate 头以指明允许的方法。
SEO 影响
像 Google 这样的搜索引擎不会索引返回 407 Proxy Authentication Required 状态的 URL。此前已被索引、如今返回该状态码的 URL 会从搜索结果中移除。
示例
客户端请求某个资源,服务器返回 407 Proxy Authentication Required,表明该资源处于代理保护之后。服务器表示支持 basic 授权。客户端使用 basic 认证协议,在 Proxy-Authorization 头中以 username:password 对作出响应。随后服务器传输所请求的资源。
初始请求
GET /documents/tech-news HTTP/1.1
Host: example.com
初始响应
HTTP/1.1 407 Proxy Authentication Required
Proxy-Authenticate: Basic realm="Documents"
下一次请求
GET /documents/tech-news HTTP/1.1
Host: example.com
Proxy-Authorization: Basic RXhhbXBsZTphaQ==
最终响应
HTTP/1.1 200 OK
Content-Type: application/pdf
Content-Length: 25000
<PDF document included in message body>
如何修复
407 Proxy Authentication Required 意味着代理服务器在转发请求之前需要有效的凭据。
检查响应中的 Proxy-Authenticate 头。此头指定了所需的认证方案(Basic、Digest、NTLM、Negotiate)。使客户端配置与期望的方法相匹配。用浏览器开发者工具或通过代理的 curl -v 检查该头。
在客户端配置代理凭据。在浏览器代理设置、应用配置或环境变量中设置代理的用户名和密码。对于命令行工具,将凭据嵌入代理 URL:
export HTTP_PROXY=http://user:pass@proxy:8080
export HTTPS_PROXY=http://user:pass@proxy:8080
对于编程式 HTTP 客户端,在 Proxy-Authorization 头中包含凭据。
核实代理的用户名和密码。不正确或过期的凭据对会触发此错误。与网络管理员确认这些值。NTLM 和 Kerberos 代理需要加入域的凭据。核实是否包含域前缀(如 DOMAIN\username)。
检查透明代理拦截。有些企业网络会将所有流量路由经过一个透明代理,而无需客户端显式配置。VPN 连接或网络策略变更会引入原本不存在的代理认证。检查系统代理设置(Windows:Internet 选项,macOS:系统设置 > 网络 > 代理,Linux:/etc/environment 或桌面代理设置)。
清除缓存的代理凭据。浏览器和操作系统会缓存代理认证令牌。密码更改后,陈旧的缓存凭据会导致反复出现 407 响应。清除凭据缓存(Windows 上的凭据管理器,macOS 上的钥匙串访问)。
核实代理是否允许目标域名。有些代理服务器会将访问限制在已批准的域名或 URL 类别。即使凭据有效,若目标被策略阻止,代理也会返回 407 以强制重新认证。与网络管理员核对代理的允许列表。
联系网络管理员以获取代理访问权限。企业或机构代理需要账户开通。请求访问凭据,确认代理地址和端口,并核实所使用的认证方案。
代码参考
.NET
HttpStatusCode.ProxyAuthenticationRequired
Rust
http::StatusCode::PROXY_AUTHENTICATION_REQUIRED
Rails
:proxy_authentication_required
Go
http.StatusProxyAuthRequired
Symfony
Response::HTTP_PROXY_AUTHENTICATION_REQUIRED
Python3.5+
http.HTTPStatus.PROXY_AUTHENTICATION_REQUIRED
Java
java.net.HttpURLConnection.HTTP_PROXY_AUTH
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_PROXY_AUTHENTICATION_REQUIRED
Angular
@angular/common/http/HttpStatusCode.ProxyAuthenticationRequired