皆さん、今日はちょっとハードコアで実用的な話をしましょう——HTTPステータスコードです。この数字が普段ブラウザの裏やAPIのレスポンスに隠れているだけで、技術的な価値がないと思っているかもしれません。でも、ここには深い話があるんです。7、8年コードを書いてきた「ベテラン」でも、200、404、500を聞かれれば完璧に答えられますが、429、451、508の意味を聞かれると、必ず詰まってすぐにGoogle検索するでしょう。
まず、一番心に刺さるシチュエーションから。あなたが気持ちよくウェブページを閲覧していると、突然404が表示された。最初に何を思いますか?「このクソサイトまた落ちた?」大間違い!404は「リソースが見つからない」という意味で、サーバーは生きているが、アクセスしたものが移動されたか、削除されたか、そもそも閲覧権限がないことを示します。多くの運営担当者は404を見るとすぐに技術にチケットを上げて「サイトが開けない」と言いますが、これは典型的にステータスコードの「暗号」を理解していない例です。「誤報」と「本当の障害」を区別できなければ、どうやって開発と言い合いをするんですか?
もう一つ、もっと分かりにくい例を挙げます。夜中に頑張ってバズった記事を投稿したのに、翌日バックエンドを見るとコンバージョン率が驚くほど低い。ログを確認?全部200です。でも200が成功を意味するのでしょうか?甘いです。APIが200を返しても、フロントエンドでJSONを解析する際にエラーが発生したり、返されたデータにnullが含まれていてページが半分しか表示されない場合、その200は「病気を抱えたままの稼働」です。本当のプロは、200を見た後にレスポンスボディのサイズと応答時間もチェックします。これが「現象を通して本質を見る」ということです。
次に、あまり知られていないが命を救うコードをいくつか紹介します。429は非常に一般的ですが、多くの人が「レート制限」を「IPブロック」と誤解しています。実は429は「リクエストが多すぎる」という意味で、レート制限されていますが、サーバーはあなたを殺そうとしているわけではありません。レスポンスヘッダーに「どれくらい待てば再試行できるか」が示されます。無闇にリトライすると、本当に「悪意のある攻撃」と見なされ、403(アクセス禁止)にまで到達します。また、508は「ループ検出」と呼ばれ、あなたが書いたコードに無限ループがあるか、再帰に終了条件がない場合にサーバーが心配してくれます。このコードが出たら、サーバーを責める前に、自分のforループにbreakが足りないか確認しましょう。
最も奇妙なのは451です。このコードは「法律上の理由で利用不可」という意味で、SF映画のようです。アクセスしたファイルは削除されていないし、壊れてもいないが、あなたの地域の法律で閲覧が許可されていないため、サーバーは直接451を返します。このコードは欧米で非常に一般的で、日本ではあまり見かけませんが、クロスボーダービジネスをしているなら、451を知らないと自分のネットワークの問題だと思うでしょう。実際は「政治的正しさ」で拒否されているのです。
ここまで話して、一つ伝えたいのは、ステータスコードは単なる数字ではなく、サーバーがあなたに話しかけているのだということです。200は必ずしも「こんにちは」ではなく、「ごまかしたよ」かもしれません。500も必ずしも「死んだ」ではなく、「生きているけど吐きそうだ」かもしれません。この言語をマスターすれば、問題を調査する効率は少なくとも2倍になります。分厚い『HTTPの权威ガイド』を一日中読むのはやめましょう。あれは厚すぎます。必要なのは、手軽なツール、例えば「HTTPステータスコード検索」のような小さなツールで、コードを入力すれば即座に説明とシナリオが表示され、本をめくるよりずっと速いです。
最後に一言:技術者として最も恐れるべきは「結果だけ知って原因を知らない」ことです。あなたと他の人の給料の差は、他の人が418(私はティーポット)を見てニヤリとできるのに、あなたは「何だこのクソサーバー」と罵るだけ、というところにあるかもしれません。ツールは死んでいますが、人間は生きています。次に不可解なコードに遭遇したら、慌てずに調べてみてください。それだけで大多数の人より優れています。結局、このご時世、404でさえネタにされるのに、ステータスコードが重要でないなんて言えますか?