はじめに
ChatGPTによる解説です!
HTTPステータスコードというと、通常は次のようなものを思い浮かべます。
200 OK404 Not Found500 Internal Server Error
Web開発をしていると頻繁に目にするため、「ただの機械的な番号」という印象を持ちやすいですが、実はHTTPの世界には技術者たちの遊び心が詰まった文化があります。
その代表例が、HTTPステータスコード 418 I'm a teapot です。
この記事では、ターミナルから実際に 418 を確認する方法、なぜ一部のサイトでは 200 が返るのか、そして自分でも「遊び心あるHTTP API」を作る方法まで、詳しく整理していきます。
418 I’m a teapot とは?
418 I'm a teapot は、ジョークとして定義されたHTTPステータスコードです。
由来は RFC 2324:
Hyper Text Coffee Pot Control Protocol (HTCPCP)
これは1998年のエイプリルフールRFCで、「コーヒーポットをHTTPで制御する」という完全なネタ仕様でした。
その中で、
ティーポットにコーヒーを淹れようとした場合
サーバーは:
418 I'm a teapot
を返す、という設定になっています。
現在では多くの開発者向けサービスが、このジョークを残しています。
最初にハマりやすいポイント
最初に次のコマンドを試す人は多いです。
curl -o /dev/null -s -w "%{http_code}\n" https://httpstatus.com/418
しかし返ってくるのは:
200
です。
なぜ418ではなく200なのか?
理由はシンプルで、
https://httpstatus.com/418
は「418を返すAPI」ではなく、
HTTPステータス418を説明するWebページ
だからです。
つまり:
- Webページ自体は正常表示されている
- そのためHTTP的には
200 OK
になります。
これはHTTPの理解としてかなり重要です。
「URLに418と書いてある」ことと、
「HTTPレスポンスとして418を返す」ことは全く別です。
本当に418を返すサービス httpbin.org
最も有名なのが httpbin.org です。
curl -i https://httpbin.org/status/418
実行すると:
HTTP/2 418
-=[ teapot ]=-
_...._
.' _ _ `.
| ."` ^ `". _,
\_;`"---"`|//
| ;/
\_ _/
`"""`
ASCIIアート付きで返ってきます。
これは開発者界隈ではかなり有名です。
http.cat は何を返しているのか
次のようなコマンドもあります。
curl -i https://http.cat/418
しかし、これを実行すると:
HTTP/2 200
content-type: image/jpeg
になります。
http.cat は:
「HTTPステータスコードをテーマにした画像サイト」
だからです。
つまり:
418の画像を返している- 画像ファイル自体の取得は成功している
- そのためHTTPレスポンスは
200
になります。
ここでも:
- 「418をテーマにしたコンテンツ」
- 「実際のHTTPステータス418」
は別物です。
HTTPを理解するうえで非常に良い学習ポイントです。
curlで遊べる面白いサービス集
1. ランダムHTTPステータス
curl -i https://httpstat.us/random
アクセスするたびに:
- 200
- 404
- 500
- 418
など、ランダムなHTTPレスポンスが返ります。
2. 任意のステータスコードを返す
curl -i https://httpstat.us/503
503 Service Unavailable を返します。
遅延付きも可能:
curl -i "https://httpstat.us/500?sleep=2000"
2秒待って500を返します。
APIクライアントやリトライ処理のテストに便利です。
3. レスポンス遅延テスト
time curl https://httpbin.org/delay/3
3秒待ってからレスポンスを返します。
タイムアウトや非同期処理の検証によく使われます。
4. User-Agent確認
curl https://httpbin.org/user-agent
自分が送っている User-Agent を確認できます。
5. 自分のIP確認
curl https://httpbin.org/ip
現在のグローバルIPを確認できます。
6. HTTPヘッダ確認
curl https://httpbin.org/headers
サーバー側から見えているHTTPヘッダを一覧表示します。
7. JSONをPOSTする
curl -X POST https://httpbin.org/post \
-H "Content-Type: application/json" \
-d '{"tea":"earl grey"}'
送ったJSONをそのまま返してくれます。
API開発のデバッグに非常に便利です。
8. ターミナル天気表示
curl wttr.in/Osaka
ASCIIアート風の天気予報が返ります。
CLI文化圏ではかなり有名です。
9. parrot.live
curl parrot.live
ターミナル上で踊るオウムが表示されます。
完全にネタですが、開発者コミュニティでは非常に有名です。
「HTTPの遊び」は自分でも作れる
ここからが本題です。
実はこれらは、特別な技術ではありません。
ほとんどは:
サーバー側で好きなステータスコードとテキストを返しているだけ
です。
つまり、自分でも簡単に作れます。
Node.jsで最小の遊びAPIを作る
const http = require('http');
http.createServer((req, res) => {
if (req.url === "/coffee") {
res.writeHead(418, { "Content-Type": "text/plain" });
res.end("☕ I'm a teapot");
return;
}
if (req.url === "/fortune") {
const fortunes = [
"今日はバグが少ない",
"デプロイは慎重に",
"キャッシュを疑え",
];
res.writeHead(200, {
"Content-Type": "text/plain; charset=utf-8"
});
res.end(
fortunes[Math.floor(Math.random() * fortunes.length)]
);
return;
}
res.writeHead(404);
res.end("nothing here");
}).listen(3000);
console.log("http://localhost:3000");
実行:
node server.js
アクセス:
curl localhost:3000/coffee
curl localhost:3000/fortune
作ると楽しいアイデア集
1. 気分ステータスAPI
HTTP/1.1 503 Sleepy
深夜だけ503を返す。
2. 今日の言い訳API
curl localhost:3000/excuse
返答:
works on my machine
3. ランダムHTTPコードAPI
アクセスするたびに:
- 200
- 404
- 418
- 451
- 500
などをランダム返却。
4. curl専用サイト
ブラウザからアクセスすると:
Please use curl.
curl経由だと本編を返す。
User-Agentで分岐できます。
5. ASCIIアートAPI
curl localhost:3000/cat
返答:
/\_/\\
( o.o )
> ^ <
CLI文化と相性が良いです。
技術力より「センス」が大事
こういう遊び系APIは、巨大システムを作る高度な技術とは少し違います。
重要なのは:
- 小ネタ
- 世界観
- ちょっとしたユーモア
- 開発者文化への理解
です。
そのため、初心者でも十分作れます。
むしろ:
「妙に記憶に残る小さいサービス」
の方が、開発者コミュニティで愛されることがあります。
無料で公開もできる
現在は個人APIを簡単に公開できます。
代表例:
- Render
- Railway
- Vercel
Node.jsの小さいサーバーなら無料枠でも十分動きます。
そのため:
curl your-api.example.com/coffee
のような、自分専用のネタAPIを世界中に公開できます。
まとめ
HTTPステータスコードは単なる番号ではなく、インターネット文化そのものでもあります。
特に 418 I'm a teapot は:
- RFC由来の歴史
- 開発者ジョーク
- CLI文化
- API実験文化
が全部詰まった存在です。
そして重要なのは、こういうものは:
自分でも普通に作れる
ということです。
Node.js数十行でも十分面白いものが作れます。
HTTPを学ぶことと、遊ぶことは意外と近い世界にあります。
ぜひ、自分だけの「変なAPI」を作ってみてください。