HTTPステータスコードとは、Webサーバーがリクエストに対して返す3桁の数字です。
200番台(成功)・300番台(リダイレクト)・400番台(クライアントエラー)・500番台(サーバーエラー)の5グループに分かれ、よく見る200 OK・301・404・500など15種類以上をこの記事で一覧表付きで解説します。
「404って何?」「500エラーが出たけどどうすればいい?」。そんな疑問を持つ方に向けて、各コードの意味・発生原因・対処法をわかりやすくまとめました。
ブラウザのDevToolsで確認する方法も紹介するので、実務にもすぐ役立ちます。
HTTPステータスコードとは?仕組みをわかりやすく解説
私自身、Web開発の現場でHTTPステータスコードに何度も助けられてきました。
あるプロジェクトでバッチ処理のメモリ設定を誤り、本番環境で500エラーが頻発したことがあります。
原因調査に2時間かかりましたが、ステータスコードの意味を正しく理解していたおかげで「サーバー側の問題」と即座に切り分けでき、クライアントへの初動報告もスムーズに行えました。

コンピュータの世界の「言い訳集」
HTTPステータスコードとは、あなたがWebサイトを見ようとした時、サイトのデータが置いてあるサーバーというコンピュータから、あなたのパソコンやスマホに返される「3桁の数字のメッセージ」です。
例えば、あなたがブラウザに「このページが見たい」とお願いしたとします。
そのお願いに対して、サーバーが「はい、どうぞ(200 OK)」と素直にページを見せてくれる時もあれば、「そのページはないよ(404 Not Found)」と冷たくあしらわれる時もあるのです。
つまり、HTTPステータスコードは、サーバー側の都合や言い分を伝えるための、一種の言い訳集のようなもの。
この数字の意味を知ることで、私たちはサーバーの「本音」を読み解けるようになります。
サーバーからのツンデレ返信
サーバーからの返信は、常に親切とは限りません。「ページが見つかりませんでした。
もしかして、アドレスが間違っていませんか?」のように丁寧なら良いのですが、実際には「404」と数字を叩きつけてくるだけ。
まるで、ぶっきらぼうなツンデレキャラクターからの返信です。しかし、その無愛想な数字には、きちんと意味が隠されています。
これから、その返信の意味を、5つのグループに分けて解説していきましょう。
HTTPステータスコード一覧表
まずは全体像を把握しましょう。
以下の表に、RFC 9110(2022年策定、2026年6月時点で現行標準)で定義されている代表的なHTTPステータスコードをまとめました。
各コードの詳しい解説は、このあとのセクションで紹介しています。
| コード | 名前 | 分類 | 意味 |
|---|---|---|---|
| 100 | Continue | 情報 | リクエストの前半を受理。残りを送ってOK |
| 101 | Switching Protocols | 情報 | プロトコル切り替え要求を承認 |
| 103 | Early Hints | 情報 | 最終レスポンス前にリソースのプリロードを指示 |
| 200 | OK | 成功 | リクエストが正常に処理された |
| 201 | Created | 成功 | リクエスト成功+新しいリソースが作成された |
| 204 | No Content | 成功 | 成功したが返すコンテンツがない |
| 301 | Moved Permanently | リダイレクト | 恒久的に別のURLへ移動 |
| 302 | Found | リダイレクト | 一時的に別のURLへ移動 |
| 304 | Not Modified | リダイレクト | 前回から変更なし(キャッシュ利用可) |
| 400 | Bad Request | クライアントエラー | リクエストの形式が不正 |
| 401 | Unauthorized | クライアントエラー | 認証が必要 |
| 403 | Forbidden | クライアントエラー | アクセス権限がない |
| 404 | Not Found | クライアントエラー | ページが見つからない |
| 405 | Method Not Allowed | クライアントエラー | 許可されていないHTTPメソッド |
| 500 | Internal Server Error | サーバーエラー | サーバー内部で予期しないエラー |
| 502 | Bad Gateway | サーバーエラー | ゲートウェイが不正な応答を受信 |
| 503 | Service Unavailable | サーバーエラー | サーバーが一時的に利用不可 |
| 504 | Gateway Timeout | サーバーエラー | ゲートウェイがタイムアウト |
ここからは、各番台のステータスコードを詳しく見ていきましょう。
100番台 ―「ちょっと待ってて、処理中だから」
100番台のHTTPステータスコードは「情報レスポンス」と呼ばれ、リクエストの処理がまだ途中であることをクライアントに伝えます。
普段ブラウザで目にすることはほとんどありませんが、裏側ではしっかり働いています。
100 Continue: 「最初の部分は受け取ったよ、続きをどうぞ」
大きなファイルをアップロードする時など、クライアントがまず「これから大きなデータを送りますが、大丈夫ですか?」とサーバーにお伺いを立てます。
サーバーが「100 Continue」を返すことで、「問題ないよ、続きを送って」と許可を出すのです。
いきなり大量のデータを送りつけて拒否されるリスクを減らす、礼儀正しい仕組みです。
101 Switching Protocols: 「OK、そっちの言葉で話そうか」
クライアントが「HTTPからWebSocketに切り替えたい」とお願いした時に、サーバーが「了解、プロトコルを切り替えるよ」と応じる際に返されます。
リアルタイムチャットやオンラインゲームなど、常時接続が必要な場面で使われるコードです。
日常会話で例えるなら、「日本語じゃなくて英語で話そう」と提案されて「OK」と返すようなものです。
103 Early Hints: 「先にこれ準備しといて」
サーバーが最終的なレスポンスを準備している間に、ブラウザへ「先にこのCSSやJavaScriptを読み込んでおいて」と指示するコードです。
RFC 8297で定義され、2026年時点でChrome・Firefox・Edgeが完全対応、Safariはpreconnectのみ対応しています。
ページの表示速度を改善するための比較的新しい仕組みです。
200番台 ―「やればできるじゃん」

200番台のHTTPステータスコードは、リクエストが「成功」したことを示す、いわば優等生グループ。しかし、その態度はどこか恩着せがましいのが特徴です。
200 OK: 「はいはい、やっときましたよ」
最も目にする成功コードが、この「200 OK」でしょう。あなたが「このページを見せて」とお願いしたことに対して、「はいはい、分かりましたよ。
表示しときますね」と、言われた仕事をきちんとこなした時に返ってきます。
当たり前のように表示されるので感謝されることは少ないですが、サーバーがきちんと仕事をしてくれた証です。
普段は意識しませんが、この「200 OK」が返ってくる日常こそが、平和なインターネットの姿なのです。
たまには「いつもありがとう」と心の中でつぶやいてあげてください。
201 Created: 「ほら、新しく作っといたから感謝しなよ」
「201 Created」は、リクエストに応じて新しい何か(例えば、ユーザーアカウントや投稿データなど)が「無事に作成された」ことを示すHTTPステータスコードです。
「200 OK」が言われた通りの仕事をこなすだけなのに対し、こちらは「新しいものを作ってやったぞ」という、少しドヤ顔気味なニュアンスを含んでいます。
SNSに新しい投稿をした時や、会員登録が完了した時など、サーバー内部で新しいデータが生まれた瞬間にこの返事が来ます。
「ほら、君のために新しいリソースを用意してあげたんだから、感謝したまえよ」というサーバーの声が聞こえてきそうです。
204 No Content: 「やったけど、返すものは特にないよ」
リクエストは正常に処理されたものの、レスポンスとして返すコンテンツがないことを示します。
例えば、フォームの送信後にページを遷移させたくない場合や、DELETEリクエストでリソースを削除した後のレスポンスとして使われます。
200 OKと違い、ブラウザの画面は更新されません。「仕事はしたけど、見せるものは何もないよ」という寡黙な働き者タイプです。
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のタイプミスや、ページが削除された場合に発生します。
まるで「そのページはあなたの夢だったのかもしれないね」とでも言われているような、一抹の寂しさを感じさせるエラーコードです。
実務では、404エラーはサイトリニューアル時に大量発生しがちです。
旧URLから新URLへの301リダイレクトを設定し忘れると、検索エンジンからの流入が一気にゼロになることもあります。
404を見つけたらまずURLのタイプミスを確認し、次にサーバーのリダイレクト設定を見直すのが鉄板の対処フローです。
405 Method Not Allowed: 「その頼み方じゃダメだよ」
リクエスト先のURLは存在するものの、使用したHTTPメソッド(GET、POST、DELETE等)が許可されていない場合に返されます。
例えば、読み取り専用のAPIにDELETEリクエストを送った場合などが該当します。
「場所は合っているけど、そのやり方では対応できない」と言われているようなものです。
500番台 ―「ごめん、やらかした」

400番台が「お前のせい」シリーズだったのに対し、500番台は「サーバー側のエラー」を示します。つまり、「本当に申し訳ない。
完全にこっちがやらかした」という、サーバーの素直な(?)謝罪シリーズです。
500 Internal Server Error: 「ちょっとパニック中なんで後で」
サーバー内部で「予期せぬ問題」が発生したことを示す、曖昧なエラーです。原因が何であれ、サーバーが正常に動作できない状態に陥った時に表示されます。
人間に例えるなら、「今、頭が真っ白でパニック中です。何が起きたか自分でも分からないので、とにかく後にしてくれ!」という状態です。
プログラムのバグや設定ミスなど、原因はさまざまですが、サーバー自身も混乱しているため具体的なことは何も教えてくれません。
ユーザーとしては、回復を待つしかありません。
502 Bad Gateway: 「あいつ(別のサーバー)が悪いんだよ!」
このエラーは、サーバーが別のサーバーから不正な応答を受け取った時に発生します。
中間で橋渡し役をしているサーバー(ゲートウェイやプロキシ)が、「俺はちゃんと仕事したのに、奥にいる大元のサーバーから変な返事が来たんだ。
だから俺は悪くない!」と責任転嫁している状況です。
社内の伝言ゲームで、最後の担当者が間違った情報を伝えてきたようなもの。中間管理職サーバーの悲哀が聞こえてくるようなHTTPステータスコードです。
503 Service Unavailable: 「今ちょっと休憩してるんで」
サーバーが「一時的に利用できない」状態を示します。アクセスが集中して高負荷になっている時や、メンテナンス中の時に返ってきます。
「500」が予期せぬパニックだったのに対し、こちらは「すみません、今ちょっと忙しすぎる(もしくは休憩中な)ので、対応できません。
また後で来てください」という、計画的(あるいは意図せずとも)なサービス停止です。
人気のラーメン屋に行列ができて、一時的に「準備中」の札を出すようなイメージでしょうか。
504 Gateway Timeout: 「あいつ遅すぎて待ちきれん」
「502」と同様に、サーバー間で連携している時に発生します。
中間サーバーが、奥にいるサーバーからの返事を待っていたものの、「あまりにも応答が遅いので、待ちきれずに諦めた」という状況です。
待ち合わせ相手が全然来ないので、先に帰ってしまったような状態。
「あいつ、いつまで待たせるんだよ…もうタイムアップだ!」という、中間サーバーのしびれを切らした声が聞こえてきそうです。
これもまた、ユーザー側ではどうすることもできず、ただ復旧を祈るしかありません。
HTTPステータスコードの確認方法
ここまで各コードの意味を解説してきましたが、実際に自分のサイトやAPIがどのステータスコードを返しているかを確認する方法も知っておきましょう。
ChromeのDevToolsで確認する手順
最も手軽な方法が、Google ChromeのDevTools(開発者ツール)を使うやり方です。手順は以下のとおりです。
- 確認したいWebページをChromeで開く
F12キー(Macの場合はCmd + Option + I)を押してDevToolsを開く- 上部タブから「Network」を選択する
- ページをリロード(
F5)する - 表示されたリクエスト一覧の「Status」カラムにステータスコードが表示される
200が並んでいれば正常、赤字で表示される400番台や500番台があればエラーが発生しています。
curlコマンドで確認する方法
ターミナルやコマンドプロンプトが使える環境なら、curlコマンドでもステータスコードを確認できます。
curl -I https://example.com-Iオプションを付けるとレスポンスヘッダーだけが表示され、1行目にHTTP/1.1 200 OKのようにステータスコードが確認できます。
APIの動作確認やサーバーの状態チェックに便利です。
HTTPステータスコードのまとめ
HTTPステータスコードの世界は、私たちの社会とよく似ています。
言われた仕事をそつなくこなす「200 OK」のような成功もあれば、こちらの勘違いで起きる「404 Not Found」のような失敗もあります。
開発者として10年以上この数字たちと向き合ってきた経験から言えるのは、ステータスコードを正しく理解して返すことが、API設計やWeb開発の基本中の基本だということです。
適切なステータスコードを返さないAPIは、利用者に混乱を与え、トラブルシューティングの時間を何倍にも膨らませます。
次にエラー画面に出会った時は、まず番台(400番台ならクライアント側、500番台ならサーバー側)を見て原因の切り分けをしてください。
それだけで、問題解決のスピードが大きく変わるはずです。
HTTPステータスコードに関するよくある質問
404と403の違いは何ですか?
404は「ページが見つからない(Not Found)」、403は「アクセス権限がない(Forbidden)」ことを示します。404はURLが存在しない、403はURLは存在するがアクセスが拒否されている状態を表す点が異なります。
500エラーが出たとき、まず何を確認すればいいですか?
500はサーバー側の問題なので、サーバーのエラーログを確認するのが第一歩です。自分がクライアント側の場合は、時間を置いて再試行するか、サービス提供者側の障害情報を確認してください。
ブラウザでステータスコードを確認するにはどうすればいいですか?
ブラウザのDevTools(開発者ツール)を開き、Networkタブでページを再読み込みすると、各リクエストのStatusカラムにステータスコードが表示されます。Chrome・Firefox・Safariいずれも同様の手順で確認できます。