[インデックス 12183] ファイルの概要
このコミットは、Go言語のnet/http
パッケージに、HTTPステータスコード「418 I'm a teapot」を追加するものです。これは、RFC 2324で定義されたユーモラスなステータスコードであり、HTTPプロトコルにおける遊び心のある側面を反映しています。
コミット
commit 5fb82d8cf600ad7388306a0bf9899dc2a93aaafa
Author: David Symonds <dsymonds@golang.org>
Date: Fri Feb 24 11:55:31 2012 +1100
net/http: add overlooked 418 status code, per RFC 2324.
R=golang-dev, bradfitz, rsc
CC=golang-dev
https://golang.org/cl/5688067
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/5fb82d8cf600ad7388306a0bf9899dc2a93aaafa
元コミット内容
net/http: add overlooked 418 status code, per RFC 2324.
R=golang-dev, bradfitz, rsc
CC=golang-dev
https://golang.org/cl/5688067
変更の背景
この変更は、HTTPステータスコード「418 I'm a teapot」をGo言語の標準ライブラリであるnet/http
パッケージに追加するものです。このステータスコードは、RFC 2324「Hyper Text Coffee Pot Control Protocol (HTCPCP/1.0)」で定義されています。
RFC 2324は、1998年4月1日にエイプリルフールのジョークとして公開された、風刺的なRFCです。これは、コーヒーポットを制御するためのプロトコルを定義しており、HTTPを不適切に拡張する方法を強調することを目的としていました。その中で、サーバーがコーヒーポットであり、コーヒーを淹れることができない場合に返されるエラーコードとして「418 I'm a teapot」が導入されました。
このコミットは、Goのnet/http
パッケージが、HTTPプロトコルの定義に忠実であるという原則に基づき、このユーモラスな、しかし公式に定義されたステータスコードを見落とさないように追加されたものと考えられます。これは、プロトコルの完全な実装を目指すGoの姿勢を示す一例とも言えます。
前提知識の解説
HTTPステータスコード
HTTPステータスコードは、Webサーバーがクライアントからのリクエストに対して、その結果を伝えるために使用する3桁の数字です。これらのコードは、リクエストが成功したか、リダイレクトが必要か、クライアントエラーが発生したか、サーバーエラーが発生したかなどを示します。例えば、200 OK
はリクエストが成功したことを意味し、404 Not Found
はリクエストされたリソースが見つからなかったことを意味します。
RFC (Request for Comments)
RFCは、インターネット技術に関する公式な文書のシリーズです。インターネットのプロトコル、手順、プログラムなどを定義し、標準化するために使用されます。RFCは、インターネットコミュニティによって作成され、ピアレビュープロセスを経て公開されます。中には、RFC 2324のように、エイプリルフールのジョークとして公開される風刺的なものも存在します。
RFC 2324: Hyper Text Coffee Pot Control Protocol (HTCPCP/1.0)
RFC 2324は、1998年4月1日に公開されたエイプリルフールのジョークRFCです。このRFCは、コーヒーポットを制御するためのプロトコルであるHTCPCPを定義しています。これは、HTTPをベースにしており、コーヒーを淹れるためのBREW
メソッドや、ミルクや砂糖などの追加オプションを指定するためのヘッダーフィールドなどを導入しています。
このRFCの主な目的は、HTTPが不適切に拡張される可能性を風刺的に示すことでした。その中で、サーバーがコーヒーポットであり、コーヒーを淹れることができない場合に返されるエラーコードとして、418 I'm a teapot
が定義されました。このステータスコードは、そのユーモラスな性質から、Web開発者の間で一種のイースターエッグやジョークとして広く知られるようになりました。
技術的詳細
418 I'm a teapot
ステータスコードは、HTTPのクライアントエラー(4xx)の範囲に属します。通常、4xxエラーはクライアントのリクエストに問題があることを示しますが、この418は非常に特殊なケースです。これは、クライアントがコーヒーを淹れるようにリクエストしたが、サーバーがコーヒーポットであるため、そのリクエストを処理できないことを示します。
このステータスコードは、実際のWebアプリケーションで広く使用されることはありませんが、開発者が遊び心のあるエラーメッセージを表示したり、特定の状況下でのデバッグ目的で使用したりすることがあります。また、一部のWebフレームワークやライブラリでは、このステータスコードがサポートされていることがあります。
Go言語のnet/http
パッケージにこのステータスコードが追加されたことは、GoがHTTPプロトコルの定義を厳密に遵守し、そのすべての側面(たとえそれがユーモラスなものであっても)を網羅しようとする姿勢を示しています。これにより、開発者はnet/http
パッケージを使用して、この特殊なステータスコードを簡単に利用できるようになります。
コアとなるコードの変更箇所
--- a/src/pkg/net/http/status.go
+++ b/src/pkg/net/http/status.go
@@ -43,6 +43,7 @@ const (
StatusUnsupportedMediaType = 415
StatusRequestedRangeNotSatisfiable = 416
StatusExpectationFailed = 417
+\tStatusTeapot = 418
StatusInternalServerError = 500
StatusNotImplemented = 501
@@ -90,6 +91,7 @@ var statusText = map[int]string{
StatusUnsupportedMediaType: "Unsupported Media Type",
StatusRequestedRangeNotSatisfiable: "Requested Range Not Satisfiable",
StatusExpectationFailed: "Expectation Failed",
+\tStatusTeapot: "I'm a teapot",
StatusInternalServerError: "Internal Server Error",
StatusNotImplemented: "Not Implemented",
コアとなるコードの解説
このコミットでは、src/pkg/net/http/status.go
ファイルに2つの変更が加えられています。
-
const
ブロックへの追加:StatusExpectationFailed = 417
の後に、StatusTeapot = 418
が追加されています。これにより、StatusTeapot
という定数が、HTTPステータスコード418を表す整数値として定義されます。Go言語では、このように定数としてステータスコードを定義することで、コードの可読性と保守性を高めています。 -
statusText
マップへの追加:statusText
は、HTTPステータスコードの整数値に対応する標準的なテキストメッセージを格納するマップです。このマップに、StatusTeapot: "I'm a teapot"
というエントリが追加されています。これにより、http.StatusText(http.StatusTeapot)
のように呼び出すことで、「I'm a teapot」という文字列を取得できるようになります。これは、HTTPレスポンスのステータスラインに表示されるテキストメッセージとして使用されます。
これらの変更により、Goのnet/http
パッケージは、RFC 2324で定義された「418 I'm a teapot」ステータスコードを正式にサポートし、開発者がこのコードを簡単に利用できるようになりました。
関連リンク
- Go CL: https://golang.org/cl/5688067
- GitHubコミットページ: https://github.com/golang/go/commit/5fb82d8cf600ad7388306a0bf9899dc2a93aaafa
参考にした情報源リンク
- RFC 2324 - Hyper Text Coffee Pot Control Protocol (HTCPCP/1.0): https://datatracker.ietf.org/doc/html/rfc2324
- Wikipedia - HTTP 418: https://ja.wikipedia.org/wiki/HTTP_418
- Wikipedia - Hyper Text Coffee Pot Control Protocol: https://ja.wikipedia.org/wiki/Hyper_Text_Coffee_Pot_Control_Protocol