本ページはプロモーションが含まれています

IT全般

5分でわかる!HTTPステータスコードを解説

トム

・SaaS勤務/javaのバックエンドエンジニア
/java歴10年以上 ・首都圏在住30代
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎

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サイトとの付き合い方が、少しだけ豊かになるはずです。

次にエラー画面に出会った時は、「ああ、今はパニック中なんだな」「私のアドレス入力が間違っていたのか」と、少しだけ優しい気持ちで受け止めてあげてください。

  • この記事を書いた人
  • 最新記事

トム

・SaaS勤務/javaのバックエンドエンジニア
/java歴10年以上 ・首都圏在住30代
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎

-IT全般