418 I'm a teapot
用法
418 I’m a teapot 错误消息被设计为 IETF 愚人节玩笑之一。RFC 中规定,任何被要求冲泡咖啡的茶壶都会以此消息作出响应。具体而言,其产生的消息体被描述为”矮而胖”。
尽管此状态码不用于生产环境,但许多 HTTP 库都支持它。一项旨在移除此状态码、以便腾出该编号供官方使用的努力遭到了抵制,并催生了 Save 418 行动。该消息和状态码得以保留。
状态码保留
HTTP 规范将状态码 418 保留为 “(Unused)“,以避免与广泛存在的 HTCPCP 实现产生冲突。
SEO 影响
像 Google 这样的搜索引擎不会索引响应状态为 418 I’m a teapot 的 URL。此前已被索引的 URL 会从搜索结果中移除。
示例
客户端请求冲泡咖啡,但茶壶表示反对。
请求
BREW coffee HTTP/1.1
Host: example.com
Content-Type: message/coffeepot
Content-Length: 5
start
响应
HTTP/1.1 418 I'm a teapot
Content-Type: text/html
Content-Length: 146
<html>
<head>
<title>Beverage not supported</title>
</head>
<body>
<p>This is a teapot. Coffee is not supported.</p>
</body>
</html>
触发 418 响应
只有配置为支持 HTCPCP 玩笑协议的服务器,或显式返回此状态码的应用,才会返回 418 响应。Google 在 google.com/teapot 返回 418 作为彩蛋。许多 Web 框架允许通过直接设置响应状态码来返回 418。没有任何标准 HTTP 服务器会在未经刻意配置的情况下返回 418。
418 的历史
该状态码起源于 1998 年,是超文本咖啡壶控制协议(HTCPCP)愚人节规范的一部分。2014 年又出现了一个将 HTCPCP 扩展至茶的配套规范。当 IETF 于 2017 年考虑收回该编号供官方使用时,开发者社区提出反对并发起了 Save 418 运动。IETF 最终在主 HTTP 规范中将该编号保留为 “(Unused)”。
代码参考
.NET
StatusCodes.Status418ImATeapot
Rust
http::StatusCode::IM_A_TEAPOT
Go
http.StatusTeapot
Symfony
Response::HTTP_I_AM_A_TEAPOT
Python3.9+
http.HTTPStatus.IM_A_TEAPOT
Angular
@angular/common/http/HttpStatusCode.ImATeapot