ステータスコード
Status Code
概要(サマリー)
ステータスコードとは、サーバーがHTTPリクエストに対して返す、処理結果を示す3桁の数字コードのことである。ブラウザからWebページを開くとき、スマホアプリがAPIを呼び出すとき、そのたびにサーバーとの間でこのコードがやりとりされている。普段は意識しないが、エラーが起きたときに「200」「404」「500」といった数字を目にすることがある。これらの数字の意味を知っておくと、問題の原因を特定する手がかりになる。
詳細解説
ステータスコードの分類
ステータスコードは先頭の数字によって5つのグループに分類される。
| 分類 | 意味 | 例 |
|---|---|---|
| 1xx | 情報(処理継続中) | 100 Continue |
| 2xx | 成功 | 200 OK, 201 Created |
| 3xx | リダイレクト(転送) | 301 Moved Permanently, 302 Found |
| 4xx | クライアントエラー | 400 Bad Request, 401 Unauthorized, 404 Not Found |
| 5xx | サーバーエラー | 500 Internal Server Error, 503 Service Unavailable |
よく遭遇する主要コード
200 OK
リクエストが成功した。最も基本的な成功のコード。
201 Created
リソースの新規作成に成功した。REST APIでPOSTリクエストが成功したときによく使われる。
301 Moved Permanently
URLが恒久的に別の場所へ移動した。リダイレクト設定で使われ、SEO評価も引き継がれる。
302 Found
一時的なリダイレクト。SEO評価は引き継がれない。
400 Bad Request
リクエストの形式が不正。送ったデータに問題がある場合に返る。
401 Unauthorized
認証が必要。ログインが必要なページに未認証でアクセスしたときなど。
403 Forbidden
アクセス権限がない。認証済みだが、そのリソースへの権限がないとき。
404 Not Found
URLに対応するリソースが存在しない。
422 Unprocessable Entity
リクエストの形式は正しいが、内容が処理できない。バリデーションエラー(「メールアドレスの形式が違う」など)を返す際によく使われる。
429 Too Many Requests
一定時間内にリクエストを送りすぎた(レート制限)。無料のAPIにはリクエスト数の上限がある場合が多く、超過すると返ってくる。しばらく待ってから再試行する必要がある。
500 Internal Server Error
サーバー内部でエラーが発生した。サーバー側のコードにバグがある場合など。
503 Service Unavailable
サーバーが一時的に利用不可能。メンテナンス中や過負荷状態のとき。
ブラウザでステータスコードを確認する方法
ブラウザの開発者ツール(DevTools)の「ネットワーク」タブを使うと、実際のリクエストとレスポンスのステータスコードを確認できる。
- ブラウザで
F12(MacはCmd + Option + I)を押して開発者ツールを開く - 「ネットワーク」タブを選択する
- ページをリロードするか、ボタンを押す
- リクエストの一覧が表示され、各行の「状態(Status)」列にコードが出る
赤く表示されているリクエストはエラーを示す。クリックすると「ヘッダー」「レスポンス」タブでより詳細な情報を確認できる。fetchやXHRでAPIを呼び出しているときのデバッグにも有効だ。
APIとの関係
REST APIの開発では、処理の結果に応じた適切なステータスコードを返すことが設計の基本となる。AIにAPIコードを生成してもらう際も、「作成成功時は201、見つからない場合は404を返すように」と明示すると、より適切なコードが生成される。
受け取る側(フロントエンド)では、response.status や response.ok を確認してからデータを処理することが安全なAPIとの通信の基本だ。
よくある勘違い
4xxはユーザーのせい、5xxはサーバーのせい?
おおむねそのとおりだ。4xx系は「リクエスト側(クライアント)の問題」を示し、5xx系は「サーバー側の問題」を示す。ただし、400(Bad Request)の原因がAPIの設計不備にある場合など、境界が曖昧になることもある。
ステータスコードが200なら必ず正常?
コード自体は200(成功)でも、レスポンスのボディ(中身)にエラーメッセージが入っている設計のAPIも存在する。これは設計の問題だが、APIの仕様書を確認する習慣が大切だ。
301と302はどちらでもいい?
SEOの観点では大きく異なる。301は「永続的な移転」としてGoogleにSEO評価を引き継ぐ意思を示す。302は「一時的な転送」のため評価は引き継がれにくい。ページを恒久的に移動した場合は301を使う。