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

  • 173
    いいね
  • 0
    コメント

418 I’m a tea potとは

ステータスコード 418 I’m a tea potは、エイプリルフールに発行されたジョークRFCであるRFC2324「Hyper Text Coffee Pot Control Protocol」 で定義されているステータスコードです。

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 が投げられています。

Issue中でも書かれている通り、418 I’m a tea potHyper 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」という提案仕様になります。

この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」というタイトルでHTTPのステータスコードとして418を予約し、IANAにも登録されます。

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

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

*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