HTTPで「418 I’m a tea pot」を実装してはいけない(2018/10/18追記)

(2025/05/04追記 2022年6月公開された『RFC 9110 HTTP Semantics』にて、418は Unusedになりました)

# 418 I’m a tea potとは
ステータスコード `418 I’m a tea pot`は、エイプリルフールに発行されたジョークRFCである[RFC2324「Hyper Text Coffee Pot Control Protocol」](https://tools.ietf.org/html/rfc2324) で定義されているステータスコードです。

Googleでも `418` を返すURLがあります。
Error 418 (I’m a teapot)!? https://www.google.com/teapot

# HTTPで「418 I’m a tea pot」を実装してはいけない
昨日、golangとnodejsにおいて、`418 I’m a tea pot` の実装を削除するIssue が投げられています。

- golang: [net/http: remove support for status code 418 I'm a Teapot](https://github.com/golang/go/issues/21326)
- nodejs: [418 I'm A Teapot #14644](https://github.com/nodejs/node/issues/14644)

Issue中でも書かれている通り、`418 I’m a tea pot`は**Hyper Text Coffee Pot Control Protocol**のステータスコードであり、HTTPのステータスコードではありません。

もちろん、HTTPのステータスコードとして正式に定義・登録されているものでもありません。IANAの登録情報( https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml ) を見ても登録されていないことがわかります。

# 議論
このステータスコードの議論は、HTTPの標準化を行っているIETFのHTTPBis WGで行われています。

話の発端は、TLS1.3の0-RTTを利用したHTTPリクエストはリプレイ攻撃があり、それを許容できない場合に使用する`4NN Too Early`という新しいステータスコードを定義する「[Using Early Data in HTTP](https://tools.ietf.org/html/draft-thomson-http-replay-00)」という提案仕様になります。

この`4NN Too Early`に未割り当ての`418`を使うか、`418`を避けるかという議論をしている最中です([^1])

この議論には、Joke RFCで利用されているという理由で貴重なステータスコードに穴を開けるのは良くない([^2])、実際問題としてすでに多くの実装がある([^3])、などの意見が出ています。

これらの整理はもちろん早く行ったほうがよく、実際に幾つかの実装においてIssueが立てられている状況です。

# 418をHTTPの仕様で予約する提案 (2017/08/12追記)
上記の議論及び調査を経て([^4])、HTTPにおいて418を予約する提案仕様が出ています。

提案仕様は、「[Reserving the 418 HTTP Status Code](https://tools.ietf.org/html/draft-nottingham-thanks-larry-00)」というタイトルでHTTPのステータスコードとして418を予約し、IANAにも登録されます。

これはただ予約されただけであり、HTTPで「418 I’m a tea pot」を実装してはいけない事に変わりはありません。

また、この仕様は提案段階であり引き続き議論は続きます、RFCとしてもまだ時間がかかるものと思います。

(2017/9/12更新)
同様にHTTPで418を予約する提案がMartin Thomson氏より「[The Teapot Exists](https://tools.ietf.org/html/draft-thomson-http-teapot-00)」も出ています。

こちらはteapot存在するという提案であり、プロトコルの仕様としては珍しくデカルトの哲学に言及するPhilosophical Considerationsの項目などもあります。

# 418はUnusedとして予約されます (2018/10/18追記)
現在HTTPbis WGではHTTP セマンティクスの再改定作業を行っています。
「[HTTP Semantics](https://tools.ietf.org/html/draft-ietf-httpbis-semantics-03)」この draft-03で418への言及が入りました。

```
9.5.19.  418 (Unused)

   [RFC2324] was an April 1 RFC that lampooned the various ways HTTP was
   abused; one such abuse was the definition of an application-specific
   418 status code.  In the intervening years, this status code has been
   widely implemented as an "Easter Egg", and therefore is effectively
   consumed by this use.

   Therefore, the 418 status code is reserved in the IANA HTTP Status
   Code registry.  This indicates that the status code cannot be
   assigned to other applications currently.  If future circumstances
   require its use (e.g., exhaustion of 4NN status codes), it can be re-
   assigned to another use.
```


「[HTTP 418ステータスコードが予約される](https://asnokaze.hatenablog.com/entry/2018/10/18/185401)」を参照

[^1]: https://lists.w3.org/Archives/Public/ietf-http-wg/2017JulSep/0196.html
[^2]: https://lists.w3.org/Archives/Public/ietf-http-wg/2017JulSep/0252.html
[^3]: https://lists.w3.org/Archives/Public/ietf-http-wg/2017JulSep/0250.html
[^4]: https://lists.w3.org/Archives/Public/ietf-http-wg/2017JulSep/0329.html