Webサイトを見ていると、時々表示される「404 Not Found」や「503 Service Unavailable」といった謎の数字。これらはhttpステータスコードと呼ばれ、Webサーバーからの返事を表しています。
私自身、Web業界で働き始めた頃は、この数字の羅列に何度も頭を悩ませてきました。クライアントに「サイトが見られないのですが」と連絡を受け、画面に表示された「500 Internal Server Error」の意味が分からず、冷や汗をかいた経験は一度や二度ではありません。
しかし、たくさんのエラーと格闘するうちに、気づいたのです。無機質に見えるこのhttpステータスコードたちは、まるで人間社会の「言い訳」や「ツンデレな返信」のようだと。
この記事は、過去の私のように「httpステータスコードって何?」「エラーが出たけど、どういう意味?」と悩んでいるあなたに向けて書いています。この記事を読めば、小難しく見える数字たちが、少しだけ愛おしい存在に見えてくるでしょう。そして、Webサイトで問題が起きた時に、何が起きているのかを大まかに把握できるようになります。
HTTPステータスコードってそもそも何?

コンピュータの世界の「言い訳集」
httpステータスコードとは、あなたがWebサイトを見ようとした時、サイトのデータが置いてあるサーバーというコンピュータから、あなたのパソコンやスマホに返される「3桁の数字のメッセージ」です。
例えば、あなたがブラウザに「このページが見たい」とお願いしたとします。そのお願いに対して、サーバーが「はい、どうぞ(200 OK)」と素直にページを見せてくれる時もあれば、「そのページはないよ(404 Not Found)」と冷たくあしらわれる時もあるのです。
つまり、httpステータスコードは、サーバー側の都合や言い分を伝えるための、一種の言い訳集のようなもの。この数字の意味を知ることで、私たちはサーバーの「本音」を読み解けるようになります。
サーバーからのツンデレ返信
サーバーからの返信は、常に親切とは限りません。「ページが見つかりませんでした。もしかして、アドレスが間違っていませんか?」のように丁寧なら良いのですが、実際には「404」と数字を叩きつけてくるだけ。
まるで、ぶっきらぼうなツンデレキャラクターからの返信です。しかし、その無愛想な数字には、きちんと意味が隠されています。これから、その返信の意味を、5つのグループに分けて解説していきましょう。
200番台 ―「やればできるじゃん」

200番台のhttpステータスコードは、リクエストが「成功」したことを示す、いわば優等生グループ。しかし、その態度はどこか恩着せがましいのが特徴です。
200 OK: 「はいはい、やっときましたよ」
最も目にする成功コードが、この「200 OK」でしょう。あなたが「このページを見せて」とお願いしたことに対して、「はいはい、分かりましたよ。表示しときますね」と、言われた仕事をきちんとこなした時に返ってきます。
当たり前のように表示されるので感謝されることは少ないですが、サーバーがきちんと仕事をしてくれた証です。普段は意識しませんが、この「200 OK」が返ってくる日常こそが、平和なインターネットの姿なのです。たまには「いつもありがとう」と心の中でつぶやいてあげても良いかもしれません。
201 Created: 「ほら、新しく作っといたから感謝しなよ」
「201 Created」は、リクエストに応じて新しい何か(例えば、ユーザーアカウントや投稿データなど)が「無事に作成された」ことを示すhttpステータスコードです。
「200 OK」が言われた通りの仕事をこなすだけなのに対し、こちらは「新しいものを作ってやったぞ」という、少しドヤ顔気味なニュアンスを含んでいます。
SNSに新しい投稿をした時や、会員登録が完了した時など、サーバー内部で新しいデータが生まれた瞬間にこの返事が来ます。「ほら、君のために新しいリソースを用意してあげたんだから、感謝したまえよ」というサーバーの声が聞こえてきそうです。
300番台 ―「いや、そっちじゃない」

300番台は、リクエストを完了させるために「追加の対応が必要」な状態を示します。平たく言えば、移転や変更を知らせる、ちょっとおせっかいな案内係のような存在です。
301 Moved Permanently: 「引っ越したから、住所録更新よろしく」
サイトのページが「恒久的に移動した」ことを伝えます。つまり、完全な引っ越しです。「前の住所に来られても、もう何もないよ。これからは新しい住所に来てね。あと、君の住所録もちゃんと更新しておくように」と、半ば強制的に新しい場所へ案内されます。
SEO的にも重要なhttpステータスコードで、検索エンジンに「このページは引っ越しました」と伝える役割を担っています。古い住所へのアクセスを、律儀に新しい住所へ転送し続けてくれる、真面目な案内係と言えるでしょう。
302 Found: 「とりあえず今はこっち行っといて」
「301」が恒久的な引っ越しだったのに対し、「302 Found」は「一時的な移動」を意味します。「今はこちらの都合で別のページに案内するけど、そのうち元の場所に戻るかもしれないから、住所録は更新しないでね」という、少し優柔不断な案内です。
例えば、期間限定のキャンペーンページに一時的に飛ばしたい時や、PC用とスマホ用でページを出し分けたい時などに使われます。その場しのぎ感が否めないため、「とりあえずこっち」という彼の言葉を信じて待つしかありません。
304 Not Modified: 「変わってないんだから聞くなよ」
ブラウザが「このページ、前回見てから何か更新された?」とサーバーに尋ねた際、「いや、何も変わってないよ」とサーバーが返す時に使われます。
これは、ブラウザが一度表示したページのデータ(キャッシュ)を保持しているために行われる、効率化のためのやり取りです。サーバーは「前回渡したデータと全く同じだから、わざわざもう一度送らない。手元のやつを使いなさい」と、少しイラつき気味に返答します。通信量を節約してくれる賢い仕組みですが、その言い方は少し冷たいかもしれません。
400番台 ―「お前のせいだろ」

さて、ここからが本番です。400番台のhttpステータスコードは、すべて「クライアント側(あなた)のエラー」を示します。つまり、「サーバーは悪くない。全部あなたのせいだ」という、無慈悲な責任転嫁シリーズです。
400 Bad Request: 「日本語でお願いできます?」
「400 Bad Request」は、「リクエストの形式が不正で、何を言っているのか理解できません」というサーバーからの返答です。
人間社会で例えるなら、難解な言葉で話しかけられて「え? 日本語でお願いできますか?」と聞き返されるような状況。ブラウザが送ったリクエストの文法が間違っているなど、サーバーが解読不能な要求を受け取った時に発生します。完全にこちら側のミスなので、ぐうの音も出ません。
401 Unauthorized: 「誰? 身分証出して」
ログインが必要なページに、認証情報なしでアクセスしようとした時に返ってきます。「あなたは誰ですか? ここは会員専用です。身分証(IDとパスワード)を提示してください」という、頑固な受付係からの通達です。
認証されていない、つまり「何者か分からない」相手に対して、サーバーは門前払いを決め込みます。正しいIDとパスワードを提示するまで、一歩も中に入れてはもらえません。
403 Forbidden: 「ここはVIP席だから無理」
「401」と似ていますが、こちらはさらに厳しい拒絶です。「401」が「あなたは誰?」という問いかけだったのに対し、「403 Forbidden」は「あなたが誰かは分かっている。その上で、あなたにこのページを見る権限はない」という、明確なアクセス拒否です。
管理者専用ページに一般ユーザーがアクセスしようとした時などが典型例。「あなたのことは存じ上げておりますが、残念ながらここはVIP専用席です。お引き取りください」と、丁寧かつ冷酷に追い返されるのです。身分がバレている分、ダメージは大きいかもしれません。
404 Not Found: 「そのページ、夢だったのかもしれない」
最も有名で、誰もが一度は見たことがあるhttpステータスコードでしょう。リクエストされたページが「見つからなかった」ことを示します。
しかし、その言い分は実に皮肉っぽいです。「探したけど、見つからなかった。そもそも、あなたが探しているページなんて、初めから存在しなかったんじゃないか?」と、こちらの記憶さえ疑わせるような態度を取ってきます。URLのタイプミスや、ページが削除された場合に発生しますが、まるで「そのページはあなたの夢だったのかもしれないね」とでも言われているような、一抹の寂しさを感じさせるエラーコードです。
500番台 ―「ごめん、やらかした」

400番台が「お前のせい」シリーズだったのに対し、500番台は「サーバー側のエラー」を示します。つまり、「本当に申し訳ない。完全にこっちがやらかした」という、サーバーの素直な(?)謝罪シリーズです。
500 Internal Server Error: 「ちょっとパニック中なんで後で」
サーバー内部で「予期せぬ問題」が発生したことを示す、非常に曖昧なエラーです。原因が何であれ、サーバーが正常に動作できない状態に陥った時に表示されます。
人間に例えるなら、「今、頭が真っ白でパニック中です。何が起きたか自分でも分からないので、とにかく後にしてくれ!」という状態。プログラムのバグや設定ミスなど、原因は様々ですが、サーバー自身も混乱しているため、具体的なことは何も教えてくれません。ユーザーとしては、ただ回復を待つしかないのです。
502 Bad Gateway: 「あいつ(別のサーバー)が悪いんだよ!」
このエラーは、サーバーが別のサーバーから不正な応答を受け取った時に発生します。中間で橋渡し役をしているサーバー(ゲートウェイやプロキシ)が、「俺はちゃんと仕事したのに、奥にいる大元のサーバーから変な返事が来たんだ。だから俺は悪くない!」と責任転嫁している状況です。
社内の伝言ゲームで、最後の担当者が間違った情報を伝えてきたようなもの。中間管理職サーバーの悲哀が聞こえてくるようなhttpステータスコードです。
503 Service Unavailable: 「今ちょっと休憩してるんで」
サーバーが「一時的に利用できない」状態を示します。アクセスが集中して高負荷になっている時や、メンテナンス中の時に返ってきます。
「500」が予期せぬパニックだったのに対し、こちらは「すみません、今ちょっと忙しすぎる(もしくは休憩中な)ので、対応できません。また後で来てください」という、計画的(あるいは意図せずとも)なサービス停止です。人気のラーメン屋に行列ができて、一時的に「準備中」の札を出すようなイメージでしょうか。
504 Gateway Timeout: 「あいつ遅すぎて待ちきれん」
「502」と同様に、サーバー間で連携している時に発生します。中間サーバーが、奥にいるサーバーからの返事を待っていたものの、「あまりにも応答が遅いので、待ちきれずに諦めた」という状況です。
待ち合わせ相手が全然来ないので、先に帰ってしまったような状態。「あいつ、いつまで待たせるんだよ…もうタイムアップだ!」という、中間サーバーのしびれを切らした声が聞こえてきそうです。これもまた、ユーザー側ではどうすることもできず、ただ復旧を祈るしかありません。
ステータスコードは人間社会の縮図だった
成功もあれば、失敗もある
ここまで見てきたように、httpステータスコードの世界は、私たちの社会と非常によく似ています。
言われたことをそつなくこなす「200 OK」のような成功もあれば、こちらの勘違いで起きる「404 Not Found」のような失敗もあります。時には、相手の都合で待たされる「503 Service Unavailable」のような理不尽な状況にも出くわすでしょう。
無機質な3桁の数字に一喜一憂するのは、Webに関わる人間の宿命なのかもしれません。
結局は「伝え方」が大事
これらのhttpステータスコードは、単なるエラー表示ではありません。サーバーが「今、何が起きているのか」を私たちに伝えようとしてくれる、大切なメッセージです。
その伝え方が少々ぶっきらぼうなだけで、彼らなりにコミュニケーションを取ろうとしてくれているのです。この数字の裏にあるサーバーの「気持ち」を理解することで、Webサイトとの付き合い方が、少しだけ豊かになるはずです。
次にエラー画面に出会った時は、「ああ、今はパニック中なんだな」「私のアドレス入力が間違っていたのか」と、少しだけ優しい気持ちで受け止めてあげてください。