God said

「418 I'm a teapot」を実装してみました

teapot-top
エイプリルフールからしばらく経ってしまいましたが、HTTPで「418 I'm a teapot」を返すページを実装してみました。

418 I'm a teapot | esprlog.

response-header

ちゃんと418が返ってきます。ティーポットでコーヒーを淹れようとして怒られるエラーですので、あのキャラクターにリアクションしていただきました。


「418 I'm a teapot」は1998年4月1日に発行されたエイプリルフールRFC「RFC 2324 - Hyper Text Coffee Pot Control Protocol (HTCPCP/1.0)」の中で新しく定義されたステータスコードです。

HTTPの拡張という位置づけのため、HTTPステータスコードで割り当てのない418にこのエラーがあてがわれたということだと思います。ところが未割り当てであるのを良いことに、ウェブサイトすなわちHTTPでこのステータスコードを返すイースターエッグを仕込むお遊びが流行ったようです。

google-teapot
代表的なのがGoogle。ティーポットをクリックするとお茶(コーヒー)を注いでくれるギミックまでついた凝りっぷりです。
スマートフォンでは端末の傾きを検知して注いでくれるとのことで手持ちのiPhoneで試してみましたが、残念ながらiOS端末では動作しませんでした。iOS 12.2以降でSafariからジャイロスコープへのアクセスがデフォルトで無効になったことが原因かと思います。実機が無いので分かりませんがAndroidなら今でも出来そうですね。

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.
引用元 : draft-ietf-httpbis-semantics-03 - HTTP Semantics

結局HTTPステータスコードの418は、イースターエッグで広く使われてしまっている等の理由からUnassigned(未割り当て)からUnused(未使用)になり、今後400番台が枯渇しない限りHTTPの仕様として定義されることはなくなるようです。

reason-phrase参考 : httpstat.us
余談ですが、サイトによっては画像のように“I'm a teapot”の部分まで返ってくるものもあります。Reason Phraseと呼ばれるもので、なぜ私のサイトでは表示されないのかしばらく不明でした。

8.1.2.4. Response Pseudo-Header Fields

(中略)

HTTP/2 does not define a way to carry the version or reason phrase that is included in an HTTP/1.1 status line.
引用元 : RFC 7540 - Hypertext Transfer Protocol Version 2 (HTTP/2)

どうやらHTTP/2でReason Phraseの仕様自体が無くなっていたようです。画像で利用したhttpstat.usはHTTP/1.1でした。“I'm a teapot”のメッセージあってのイースターエッグには辛い仕様変更ですが、そもそも418なんて無いわけですから贅沢も言えません。


実は3年ほど前にCube Voyageでも実装しています。発案は私ですが、この頃はWebにとんと疎く、実装はもろーかさんにお任せしました。