451 Unavailable For Legal Reasons
用法
451 Unavailable For Legal Reasons 状态码既不确认也不否认资源的存在。服务器因法律要求而拒绝访问,并且被允许如实说明这一点。
该资源因审查而被屏蔽。此 HTTP 状态码致敬雷·布拉德伯里(Ray Bradbury)的小说《华氏 451 度》。
451 Unavailable For Legal Reasons 响应适用的场景取决于访问所在国家/地区的法律。常见情况包括侵犯版权、侵犯隐私和赌博网站。任何涉及法院命令的情形,例如出版禁令,都适用此状态码。403 响应是该错误更笼统的版本。
此状态码的透明性使第三方能够就因审查而被下架的站点数量和类别收集统计数据。
在某些情况下,客户端会通过其他方式访问资源。VPN 或 Tor 网络会隐藏源点,代理服务器会将浏览器流量重定向到另一个国家/地区。
作为响应的一部分,服务器会包含一个 Link 头,标识出屏蔽该请求的一方。这是负责屏蔽内容的一方,而不是下令屏蔽的一方。关于制定该政策一方的信息应放在消息体中。
SEO 影响
像 Google 这样的搜索引擎不会索引返回 451 Unavailable For Legal Reasons 状态的 URL。过去以此状态码被索引的 URL 会从搜索结果中移除。
Microsoft Exchange ActiveSync 用法
451 Redirect 错误消息表示客户端连接到了错误的服务器。要么用户的邮箱无法从此服务器访问,要么存在一个更高效的服务器。
当响应中包含 X-MS-Location 头时,后续请求使用该头中的地址。若没有 X-MS-Location 头,则会运行完整的 Autodiscover 流程。
示例
客户端请求某个资源,服务器返回 451 Unavailable For Legal Reasons。Link 头标识出负责屏蔽该内容的实体。
请求
GET /tech-trial-updates HTTP/1.1
Host: example.com
响应
HTTP/1.1 451 Unavailable For Legal Reasons
Link: <https://example.com/legaldept>; rel="blocked-by"
Content-Type: text/html
Content-Length: 174
<html>
<head>
<title>Publication Ban</title>
</head>
<body>
<p>The requested content is unavailable due
to a government-ordered publication ban.</p>
</body>
</html>
如何修复
客户端一侧不存在技术性修复。服务器屏蔽访问是因为法律要求施加了该限制。资源本身在服务器上仍完好无损,只是不予提供。
读取响应中的 Link 头。rel=“blocked-by” 关系标识出执行屏蔽的实体(ISP、DNS 提供商或托管平台),而不是下令屏蔽的法律机关。就该要求的详情联系执行屏蔽的实体。
阅读响应体,了解法律依据、提出要求的一方以及适用的法律或法规的说明。建议服务器包含这些信息。
在某些情况下,从不同的地理区域访问可以绕过特定区域的法律屏蔽。VPN 或 Tor 网络会将请求路由经过一个该限制不适用的司法管辖区。
对于服务器运营方
返回带 rel=“blocked-by” 的 Link 头,指向负责执行屏蔽的实体:
Link: <https://legal.example.re>; rel="blocked-by"
在响应体中包含对法律要求的清晰说明:具体法律、提出要求的机关,以及受影响的内容类别或人员。
设置恰当的缓存头。如果资源的法律状态频繁变化,添加 Cache-Control: no-store。
对于 Microsoft Exchange ActiveSync
来自 Exchange 的 451 Redirect 意味着客户端连接到了错误的服务器。检查响应中的 X-MS-Location 头,并将后续请求重定向到所指定的地址。若没有 X-MS-Location 头,则重新运行完整的 Autodiscover 流程以定位正确的邮箱服务器。
代码参考
.NET
HttpStatusCode.UnavailableForLegalReasons
Rust
http::StatusCode::UNAVAILABLE_FOR_LEGAL_REASONS
Rails
:unavailable_for_legal_reasons
Go
http.StatusUnavailableForLegalReasons
Symfony
Response::HTTP_UNAVAILABLE_FOR_LEGAL_REASONS
Python3.5+
http.HTTPStatus.UNAVAILABLE_FOR_LEGAL_REASONS
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus
.SC_UNAVAILABLE_FOR_LEGAL_REASONS
Angular
@angular/common/http/HttpStatusCode
.UnavailableForLegalReasons