totonoe
雑学・読み物

404・403・500 は何が違う?──HTTPステータスコードの意味と「誰のせい」

HTTPステータスコードは1xx〜5xxの5クラスに分かれます。4xxは『依頼する側(クライアント)の問題』、5xxは『サーバ側の問題』という切り分けを軸に、404・403・500・502・503などの意味と、よくある混同を実例で解きほぐします。

404 はよく見るけど、403 とどう違うの?」「500 が出たとき、これは自分のミス?それともサーバの故障?」──HTTPステータスコードは3桁の数字なのに、意味と「誰のせい」がわかりにくいまま放置されがちです。

ブラウザやAPIのレスポンスで毎日のように目にするのに、いざ「これは何のエラー?」と聞かれると説明できない。そんな方に向けて、クラス分けと切り分けの軸を一気に整理します。

結論を先に書きます。

3桁の最初の数字でクラスが決まります。そして 4xx は『依頼する側(クライアント/リクエスト)の問題』、5xx は『サーバ側の問題』です。

この一線が引けるだけで、エラー画面を見たときに「自分のリクエストを直すのか、サーバ運用者に連絡するのか」が即座に判断できます。


まず大枠:先頭1桁で5つのクラスに分かれる

HTTPステータスコードは必ず3桁で、先頭の数字がカテゴリを表します。

クラス意味ざっくり言うと代表コード
1xx情報「処理を続けてOK」の途中経過100 Continue, 101 Switching Protocols
2xx成功リクエストは正常に処理された200 OK, 204 No Content
3xxリダイレクト別の場所を見に行って301 Moved Permanently, 302 Found
4xxクライアント側エラー依頼の仕方が間違っている400, 401, 403, 404, 429
5xxサーバ側エラーサーバが処理に失敗した500, 502, 503, 504

この表だけ覚えておけば、未知のコードに出くわしても「4で始まるなら自分のリクエスト、5で始まるならサーバ」と当たりがつきます。全コードを色分けして一覧で確認したいときは HTTPステータスコードを整える が早いです。


1xx・2xx:成功系はシンプル

1xx 情報

処理の途中経過を伝えるクラスで、通常はブラウザが裏で処理するため目にすることは少ないです。大きなアップロード前に 100 Continue でサーバの受け入れ可否を確認する、といった使われ方をします。

2xx 成功

  • 200 OK:最も一般的な成功。リクエストが正常に処理され、本文(HTMLやJSON)が返る
  • 204 No Content:成功したが返す本文がない。フォーム送信後やDELETE成功時など、「処理は終わった、表示するものはない」場面で使う

2xx が返っていれば、その通信は成功しています。


3xx:リダイレクト、301と302の違いがSEOを左右する

3xx は「目的のものは別の場所にあります」という案内です。ここで重要なのが 301 と 302 の違い

コード意味性質SEOへの影響
301Moved Permanently恒久的な移転旧URLの評価を新URLに引き継ぐ
302Found一時的な移転評価は旧URLに残る(引き継がない)

ページを完全に引っ越したのに 302 を使ってしまうと、検索エンジンは「元の場所にいずれ戻る」と解釈し、新URLに評価が移りません。サイトリニューアルやドメイン移転では、恒久移転=301 を使うのが鉄則です。逆に、メンテナンス中だけ別ページへ飛ばすなど一時的な転送には 302 が適切です。

「移転は永久(301)か、それとも仮(302)か」を意識するだけで、SEO上の事故を防げます。


4xx:クライアント側=「依頼の仕方」を直す

ここからが本題です。**4xx はすべて「リクエストを送った側に原因がある」**クラスです。

コード名前意味
400Bad Requestリクエストの形式が壊れている(不正なパラメータなど)
401Unauthorized未認証。ログインしていない/資格情報がない
403Forbidden認証済みだが権限がない。アクセスを禁止されている
404Not Found指定したURLのリソースが存在しない
429Too Many Requestsリクエストが多すぎる(レート制限)

4xx が返ったら、まず疑うのは自分のリクエストです。URLは正しいか、ログインしているか、送信データの形式は合っているか──サーバを責める前に手元を確認します。

401 と 403 の違い(最も混同される2つ)

  • 401 Unauthorized = 「あなたが誰だかわからない」。まだログインしていない、トークンが無効。→ ログインすれば解決する可能性がある
  • 403 Forbidden = 「あなたが誰かはわかった。でも権限がない」。ログイン済みだが、その操作・ページへのアクセス権を持っていない。→ ログインし直しても無駄。権限の付与が必要

名前は「Unauthorized(401)」なのに意味は『未認証』、というねじれが混乱の元です。401=認証していない、403=認証したが認可されていないと覚えると整理できます。

403 と 404 の違い(あえて隠すケースがある)

本来「権限がなくて見られない」なら 403 が正確です。しかしセキュリティ上、リソースの存在自体を隠したいとき、あえて 404 Not Found を返す設計があります。

たとえば非公開の管理画面に 403 を返すと「ここに何か存在する」と攻撃者に教えてしまう。そこで「そもそも存在しない(404)」と装い、URLの推測を防ぐわけです。404 だからといって本当に存在しないとは限らない、というのは知っておくと良い知識です。


5xx:サーバ側=「運用・上流」を見る

**5xx はすべて「サーバ側が処理に失敗した」**クラスです。リクエストが正しくても起こり得るため、利用者側でできることは限られます。

コード名前意味主な原因
500Internal Server Errorサーバ内部のエラーアプリのバグ、未処理の例外
502Bad Gatewayゲートウェイが不正な応答を受けた上流サーバが落ちている/応答が壊れている
503Service Unavailableサービス利用不可(一時的メンテナンス中、過負荷
504Gateway Timeoutゲートウェイがタイムアウト上流サーバの応答が遅すぎる

500 と 502/504 と 503 の切り分け

  • 500 Internal Server Errorそのサーバ自身のプログラムが落ちた。アプリのバグや設定ミス。サーバのログを見るのが第一歩
  • 502 Bad Gateway / 504 Gateway Timeout:手前のサーバ(リバースプロキシ/ロードバランサ)が、その先の上流サーバとうまく通信できていない。502は「壊れた応答」、504は「応答が来ない(タイムアウト)」。上流の生死を疑う
  • 503 Service Unavailable一時的な利用不可。メンテナンスや急なアクセス集中。多くの場合、時間をおけば回復する

5xx を見たら、自分のリクエストではなくサーバ・運用・上流の状態を確認します。利用者なら「少し待つ」「運用者に連絡する」が基本対応です。


「誰のせい」フレームでまとめる

迷ったら、この一線に立ち返ってください。

  • 4xx → リクエストを直す(依頼する側の問題)。URL・ログイン・送信データ・呼び出し頻度を見直す
  • 5xx → サーバ/運用側を見る(受ける側の問題)。アプリのログ・上流サーバ・メンテ状況を確認する

4で始まったら手元、5で始まったら向こう」。この切り分けができれば、エラーへの一次対応の方向を間違えません。


全コードを検索するには

ステータスコードは100種類以上あり、すべてを暗記する必要はありません。「このコード、何だっけ?」となったら HTTPステータスコードを整える でコード番号・名前から検索できます。

  • 番号・名前・キーワードで全コードを検索
  • クラス(1xx〜5xx)ごとに色分けされた一覧で俯瞰
  • 各コードの意味・代表的な原因・対処の方向をその場で確認

「301 だっけ 302 だっけ」「502 と 504 どっちが上流タイムアウト?」のような、覚えきれないけれど現場で頻出する判断に、そのまま使えます。


関連ツールとのシナジー

「ステータスコードが返ってきた(4xx/5xx)」のか、「そもそも繋がらない(DNS・ネットワーク)」のかを分けて考えると、トラブルの切り分けが一段速くなります。


まとめ

  • HTTPステータスコードは3桁で、先頭1桁でクラスが決まる(1xx情報・2xx成功・3xxリダイレクト・4xxクライアント・5xxサーバ)
  • 最重要の軸は 4xx=依頼する側の問題、5xx=サーバ側の問題
  • 301(恒久)と302(一時) の違いはSEOに直結。移転は原則301
  • 401=未認証、403=認証済みだが権限なし。403の代わりに存在を隠すため404を返すこともある
  • 500=サーバ内部、502/504=上流ゲートウェイ、503=一時的(メンテ・過負荷)
  • 「誰のせい」が分かれば、リクエストを直すのか、サーバを見るのかの一次対応を間違えない
  • コードの意味を引くなら HTTPステータスコードを整える が早い

3桁の数字を「ただのエラー番号」ではなく「クラスと責任の所在」として読めるようになると、Webのトラブル対応が一気に落ち着いて進められます。

KOINOBORI ECOSYSTEM

私たちが運営するサイト