HTTPリクエストのステータスコードについて勉強する機会があったので自分用の備忘
■ 基本構造
HTTPステータスコードは3桁で、最初の1桁で種類が決まる👇
| 先頭 | 意味 |
|---|---|
| 1xx | 情報(ほぼ使わない) |
| 2xx | 成功 |
| 3xx | リダイレクト |
| 4xx | クライアントエラー |
| 5xx | サーバエラー |
■ よく使うステータスコード(実務目線)
✅ 2xx(成功)
-
200 OK
→ 正常に処理完了(最も基本) -
201 Created
→ 新規作成成功(POSTでよく使う) -
204 No Content
→ 成功だけど返すデータなし(DELETEなど)
👉 補足
「200しか使わないAPI」は初心者あるある(あまり良くない)
🔁 3xx(リダイレクト)
-
301 Moved Permanently
→ 永久的にURL変更(SEOに影響あり) -
302 Found
→ 一時的に別URLへ -
304 Not Modified
→ キャッシュ使ってOK(通信節約)
👉 補足
301と302はブラウザの挙動・SEOが違うので重要
❌ 4xx(クライアント側のミス)
-
400 Bad Request
→ リクエストの形式がおかしい -
401 Unauthorized
→ 認証してない(ログインしてない) -
403 Forbidden
→ 権限がない(ログインしてるけどダメ) -
404 Not Found
→ URLやリソースが存在しない
👉 超重要な違い👇
- 401:そもそも認証されてない
- 403:認証済みだけど権限なし
💥 5xx(サーバ側のミス)
-
500 Internal Server Error
→ サーバ内部で例外発生 -
502 Bad Gateway
→ サーバ間通信エラー(API連携失敗など) -
503 Service Unavailable
→ サーバ停止中・過負荷
👉 補足
5xxは「ユーザーのせいじゃない」
■ 実務でのイメージ(重要)
あなたの理解を一段レベルアップさせると👇
🔵 200系
👉「処理は成功しました」
🔵 300系
👉「別の場所見て」
🔵 400系
👉「お前のリクエストおかしい」
🔵 500系
👉「サーバがやらかした」
■ よくある誤解(ここ大事)
❌ NGパターン
- エラーなのに200返す
- 全部500にする
- 401/403を区別しない
👉 これやると
- フロントが正しく制御できない
- デバッグ地獄になる
■ あなたの理解チェック(軽く厳しめ)
書いてくれた内容は正しいですが👇
- 「302=Moved Temporarily」は古い表現(今は"Found"が主)
- 400が抜けている(実務でめちゃ重要)
👉 ここ補えばかなり良い理解レベル
■ さらに一歩(中級者向け)
API設計では👇もよく使う
- 422 Unprocessable Entity(バリデーションエラー)
- 409 Conflict(データ競合)
- 429 Too Many Requests(レート制限)
■ まとめ
ステータスコードはただの数字ではなく👇
👉 「責任の所在」を示すもの
- 4xx → クライアントの責任
- 5xx → サーバの責任