Menu

HTTPステータスコード

すべてのHTTPステータスコードを検索でき、わかりやすく解説。

著者 Nethanel Bar, Co-founder & CEO

最終更新

Ready to actually learn to code?

Coddy teaches you by writing real code in your browser - interactive lessons, instant feedback, and AI help when you get stuck.

HTTPステータスコードとは?

HTTPステータスコードは、サーバーがすべてのレスポンスの先頭で返す3桁の数字で、リクエストの結果を要約するものです。ブラウザ、クライアント、プロキシ、CDNはこの値を見て、キャッシュするか、リダイレクトするか、リトライするか、ユーザーにエラーを表示するかを判断します。

ステータスコードは先頭の数字によって5つのクラスのいずれかに分類されます。1xxは情報、2xxは成功、3xxはリダイレクト、4xxはクライアントエラー、5xxはサーバーエラーです。クラスさえ分かれば、具体的なコードを調べる前でもおおよその意味は掴めます。

ほとんどのアプリで実際に使うのはごく一部のコア(200、201、204、301、302、304、400、401、403、404、409、422、429、500、502、503)に絞られます。それぞれが*何を意味するか*を理解し、401 Unauthorized403 Forbidden301 Moved Permanently302 Foundの違いをきちんと説明できるようになると、バックエンドやAPIの設計力が一段上がります。

このリファレンスを使いながら身につくこと

  • 先頭の数字を見ればクラスが分かる:1xxは情報、2xxは成功、3xxはリダイレクト、4xxはクライアントエラー、5xxはサーバーエラー。
  • ステータスコードはAPIが提示する*契約の一部*。クライアントはコードで分岐すべきで、ボディの中のエラーメッセージを文字列パースするのは筋が悪い。
  • 4xxはクライアントの落ち度(不正な入力、認証不足、リソース不存在など)。5xxはクライアントが何をしたかに関係なくサーバー側が失敗したことを示す。

ステータスコードリファレンスの使い方

  1. コードまたは名前で検索

    数字(404429)でもキーワード(authredirectrate limit)でも入力すれば、該当するコードがその場で絞り込まれます。

  2. クラスで絞り込み

    クラスのチップ(1xx、2xx、3xx、4xx、5xx)を使えば、検索ではなくざっと眺めたいときに範囲を狭められます。

  3. 平易な解説を読む

    各エントリには、そのコードが返される場面、典型的なクライアントの挙動、最も多い原因をまとめてあります。

  4. 似たコードを比較する

    紛らわしい組み合わせ(401と403301と302など)には関連リンクを張ってあるので、自分のAPIに合うのはどちらかを判断しやすくなっています。

HTTPステータスコードのクラス

HTTPステータスコードの5つのクラスと、それぞれの意味を一目で把握できる早見表。定義はRFC 9110、登録はIANA HTTP Status Code Registryにあります。

クラス意味代表的なコード
1xx Informationalリクエスト受領、処理中100, 101, 103
2xx Successリクエストは成功した200, 201, 204, 206
3xx Redirection別の場所を見てほしい301, 302, 304, 307, 308
4xx Client errorリクエストに何か問題がある400, 401, 403, 404, 409, 422, 429
5xx Server error正しいリクエストなのにサーバーが処理できなかった500, 502, 503, 504

押さえておきたい代表的なHTTPステータスコード

200 OK と 201 Created と 204 No Content

200 OK

「とりあえず全部うまくいった」を表す定番のレスポンス。ボディあり。

201 Created

リクエストの結果として新しいリソースが作成された場合に返す。たいていはPOSTの後。

204 No Content

成功したがボディなし。DELETEや、戻り値が不要なPUTの後によく使う。

3つとも成功系のコードですが、レスポンスに何を載せるかが違います。201は新しく作ったリソースを指すLocationヘッダを付けるべきで、204は定義上ボディが空です。

301 Moved Permanently と 302 Found

301

恒久的なリダイレクト。ブラウザも検索エンジンも記憶するので、元のURLは事実上死んだ扱いになる。

302

一時的なリダイレクト。ブラウザは毎回元のURLを叩き直すし、ブックマークも元のままになる。

リソースを本当に移した(リブランド、URL構造の見直しなど)ときは301を使います。A/Bテスト、ログイン後のリダイレクト、メンテナンスページのような短命な転送は302が適切です。

401 Unauthorized と 403 Forbidden

401

そもそも認証されていない。サーバーは「あなたが誰か」を知らない状態。

403

サーバーは「あなたが誰か」は分かっているが、このリソースに対する権限がない状態。

別の認証情報を送れば解決する可能性があるなら401を返します。どんな認証情報を送っても解決しない(このユーザーにはそもそも触らせない)なら403です。

500 と 502 と 503 と 504

500

汎用的なサーバーエラー。要は自分のコードが拾い切れなかった例外を投げた状態。

502

Bad Gateway。手前のプロキシ(CDNやロードバランサー)が上流サーバーに到達できなかった。

503

Service Unavailable。サーバーは生きているが、過負荷またはメンテナンス中で応答できない。

504

Gateway Timeout。プロキシが上流には届いたものの、応答が時間内に返ってこなかった。

どれもサーバーエラーですが、デバッグ時に示唆する内容はまったく違います。500はアプリ自身の問題、502504はネットワーク経路、503はキャパシティの問題を疑うサインです。

HTTPステータスコードでよくあるミス

  • 200 OKを返しつつボディに{"error": "..."}を詰める。ステータスコードは契約の一部なので、適切なコード(400404500)を返してクライアントが分岐できるようにする。
  • 権限エラーに401を使う。401は認証用で、権限不足は403
  • 新規作成したリソースに200を返す。本来は201を返し、Locationヘッダで作成先のURLを示すべき。

HTTPステータスコードのFAQ

HTTP 404はどういう意味?
404 Not Foundは、リクエスト自体は理解できたが、そのURLに対応するリソースが存在しないことを示します。原因として多いのはパスの間違い、リソースの削除、URLのタイプミスなどです。
401と403の違いは?
401 Unauthorizedは未認証、つまりサーバーがあなたを誰だか把握していない状態。403 Forbiddenは認証は済んでいるが、そのリソースへの権限がない状態です。401は別の認証情報を送れば解決する可能性がありますが、403は何を送っても解決しません。
301と302の違いは?
301 Moved Permanentlyは恒久的なリダイレクトで、ブラウザや検索エンジンは記録を更新します。302 Foundは一時的なリダイレクトで、クライアントは元のURLにアクセスし続けます。恒久移転には301、一時的な迂回には302を使います。
HTTP 500はどういう意味?
500 Internal Server Errorはサーバー側の汎用エラーで、捕捉されなかった例外がそのまま外まで漏れたときによく出ます。クライアントに非はなく、正しいリクエストなのにサーバー側が処理に失敗した状態です。
毎回必ず具体的なステータスコードを使うべき?
はい。失敗時に何でも200 OKを返したり、すべての異常を500にまとめてしまうとAPIは扱いにくくなります。最も的確なコードを選びましょう。クライアント、プロキシ、監視ツール、リトライロジックはすべてステータスコードで挙動を分岐させます。
HTTP 429はどういう意味?
429 Too Many Requestsは、クライアントがレート制限に引っかかったときに返すコードです。レスポンスにはRetry-Afterヘッダを含めて、いつ再試行して良いかをクライアントに伝えるのが望ましいです。

詳しく見る

その他の開発者ツール

Coddy programming languages illustration

Coddyでコードを学ぼう

始める