HTTPQUERY
English

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