HTTPステータスコードとは、ブラウザやAPIからのリクエストに対して、サーバーが処理結果を数字で返す仕組みです。
Webページを開いたとき、フォームを送信したとき、APIからデータを取得したときなどに、サーバーは処理結果としてステータスコードを返しています。
たとえば、ページが正常に表示できた場合は200、ページが見つからない場合は404、サーバー側で問題が起きた場合は500が返ることがあります。
この記事では、HTTPステータスコードの意味、分類、よく使うコード、Web制作やAPI開発での確認方法を初心者向けに解説します。
HTTPステータスコードとは
HTTPステータスコードは、サーバーから返ってくる処理結果を表す3桁の数字です。
ブラウザでWebページを開くと、ブラウザはサーバーに対して「このページをください」とリクエストを送ります。
サーバーは、そのリクエストに対してレスポンスを返します。
そのレスポンスの中に含まれているのがHTTPステータスコードです。
ブラウザ:/about/ のページをください
サーバー:200 OK です。ページを返します
ページが存在しない場合は、次のような結果になります。
ブラウザ:/not-found/ のページをください
サーバー:404 Not Found です。ページが見つかりません
HTTPステータスコードを見ると、リクエストが成功したのか、リダイレクトされたのか、エラーになったのかを確認できます。
HTTPステータスコードの分類
HTTPステータスコードは、先頭の数字によって大きく分類されます。
| 分類 | 意味 | 例 |
|---|---|---|
100番台 | 処理を継続している | 100 Continue |
200番台 | リクエストが成功した | 200 OK |
300番台 | 別のURLへ移動する | 301 Moved Permanently |
400番台 | クライアント側のリクエストに問題がある | 404 Not Found |
500番台 | サーバー側で問題が起きている | 500 Internal Server Error |
初心者がまず覚えたいのは、200、301、302、400、401、403、404、500、503です。
200番台:成功を表すステータスコード
200番台は、リクエストが成功したことを表します。
Webページが正常に表示された場合や、APIからデータを取得できた場合などに返ります。
| コード | 名前 | 意味 |
|---|---|---|
200 | OK | リクエストが成功した |
201 | Created | 新しいデータが作成された |
204 | No Content | 成功したが返す本文がない |
200 OK
200 OKは、リクエストが正常に成功したことを表します。
ブラウザでページが普通に表示された場合、多くは200が返っています。
GET /about/
200 OK
APIでデータを取得できた場合も、200がよく使われます。
GET /api/posts
200 OK
201 Created
201 Createdは、新しいデータが作成されたことを表します。
APIで新規投稿、会員登録、商品登録などを行った場合に使われることがあります。
POST /api/posts
201 Created
POSTで新しいデータを作ったときに使われることが多いステータスコードです。
204 No Content
204 No Contentは、処理は成功したが、返す本文がないことを表します。
たとえば、データ削除が成功したあと、レスポンス本文を返さない場合に使われます。
DELETE /api/posts/10
204 No Content
画面に表示するデータは返さないけれど、処理自体は成功している状態です。
300番台:リダイレクトを表すステータスコード
300番台は、別のURLへ移動することを表します。
URLを変更したときや、httpからhttpsへ転送するときなどに使われます。
| コード | 名前 | 意味 |
|---|---|---|
301 | Moved Permanently | 恒久的にURLが変更された |
302 | Found | 一時的に別のURLへ移動する |
304 | Not Modified | 前回から変更されていない |
301 Moved Permanently
301 Moved Permanentlyは、URLが恒久的に変更されたことを表します。
記事のURLを変更した場合や、古いページから新しいページへ移動させたい場合に使います。
旧URL:/old-page/
新URL:/new-page/
301 Moved Permanently
SEOでは、ページを完全に移転した場合に301リダイレクトを使うことが多いです。
302 Found
302 Foundは、一時的に別のURLへ移動することを表します。
キャンペーンページへ一時的に移動させる場合や、ログイン状態に応じて別ページへ移動させる場合などに使われます。
302 Found
恒久的なURL変更なら301、一時的な移動なら302と考えると分かりやすいです。
304 Not Modified
304 Not Modifiedは、前回取得したデータから変更がないことを表します。
ブラウザのキャッシュを使う場面で出てくることがあります。
ページや画像、CSS、JavaScriptファイルなどが変更されていない場合、サーバーは304を返し、ブラウザは保存済みのデータを使います。
400番台:クライアント側のエラー
400番台は、リクエスト側に問題がある場合に返ります。
存在しないURLにアクセスした、ログインが必要なページに未ログインでアクセスした、権限がないページにアクセスした、という場合に使われます。
| コード | 名前 | 意味 |
|---|---|---|
400 | Bad Request | リクエスト内容が不正 |
401 | Unauthorized | 認証が必要 |
403 | Forbidden | アクセス権限がない |
404 | Not Found | ページやデータが見つからない |
405 | Method Not Allowed | 許可されていないHTTPメソッド |
429 | Too Many Requests | 短時間にリクエストが多すぎる |
400 Bad Request
400 Bad Requestは、リクエスト内容が不正な場合に返ります。
APIに必要な値が足りない場合や、送信データの形式が間違っている場合などに使われます。
POST /api/users
400 Bad Request
フォームやAPIで400が返る場合は、送信しているデータの形式や必須項目を確認します。
401 Unauthorized
401 Unauthorizedは、認証が必要な場合に返ります。
ログインしていない状態で、ログインが必要なAPIやページへアクセスした場合などです。
GET /api/profile
401 Unauthorized
名前はUnauthorizedですが、実際には「認証が必要」という意味で使われます。
403 Forbidden
403 Forbiddenは、アクセス権限がない場合に返ります。
ログインはしていても、そのページやデータを見る権限がない場合などです。
GET /admin/
403 Forbidden
401は認証が必要、403は権限がない、という違いがあります。
404 Not Found
404 Not Foundは、ページやデータが見つからない場合に返ります。
存在しないURLにアクセスしたときによく見るステータスコードです。
GET /missing-page/
404 Not Found
Webサイト運営では、削除した記事、URL変更後のリンク切れ、入力ミスなどで404が発生します。
APIでは、指定したIDのデータが存在しない場合にも404が使われます。
GET /api/posts/9999
404 Not Found
405 Method Not Allowed
405 Method Not Allowedは、そのURLで許可されていないHTTPメソッドを使った場合に返ります。
たとえば、データ取得用のAPIにPOSTでアクセスした場合などです。
POST /api/posts/1
405 Method Not Allowed
APIを使うときは、GET、POST、PUT、PATCH、DELETEのどれを使うのか確認します。
429 Too Many Requests
429 Too Many Requestsは、短時間にリクエストを送りすぎた場合に返ります。
APIでは、利用回数の制限がある場合があります。
429 Too Many Requests
検索API、地図API、翻訳APIなどの外部APIを使う場合に見かけることがあります。
500番台:サーバー側のエラー
500番台は、サーバー側で問題が起きた場合に返ります。
プログラムのエラー、サーバー設定の問題、データベース接続の問題、メンテナンスなどで発生します。
| コード | 名前 | 意味 |
|---|---|---|
500 | Internal Server Error | サーバー内部でエラーが起きた |
502 | Bad Gateway | ゲートウェイやプロキシで問題が起きた |
503 | Service Unavailable | サービスが一時的に利用できない |
504 | Gateway Timeout | ゲートウェイやプロキシで応答が時間切れになった |
500 Internal Server Error
500 Internal Server Errorは、サーバー内部でエラーが起きた場合に返ります。
PHPのエラー、設定ファイルのミス、サーバー側の処理失敗などで発生します。
500 Internal Server Error
WordPressでは、テーマやプラグインのエラー、.htaccessの設定ミス、PHPの問題などで表示されることがあります。
502 Bad Gateway
502 Bad Gatewayは、ゲートウェイやプロキシが不正な応答を受け取った場合に返ります。
Webサーバーとアプリケーションサーバーの間で問題が起きている場合などに発生します。
502 Bad Gateway
サーバー構成やインフラ側の問題として出ることがあります。
503 Service Unavailable
503 Service Unavailableは、サービスが一時的に利用できない場合に返ります。
サーバーの過負荷、メンテナンス、アプリケーション停止などで発生します。
503 Service Unavailable
WordPressでメンテナンス中に表示されることもあります。
504 Gateway Timeout
504 Gateway Timeoutは、ゲートウェイやプロキシが時間内に応答を受け取れなかった場合に返ります。
処理に時間がかかりすぎている場合や、バックエンド側から応答が返らない場合に発生します。
504 Gateway Timeout
APIでよく使うHTTPステータスコード
APIでは、処理結果に合わせてHTTPステータスコードを使い分けます。
たとえば、投稿データを扱うAPIなら次のようになります。
| 処理 | HTTPメソッド | ステータスコード |
|---|---|---|
| 投稿一覧を取得する | GET /api/posts | 200 OK |
| 投稿を新規作成する | POST /api/posts | 201 Created |
| 投稿を更新する | PUT /api/posts/1 | 200 OK または 204 No Content |
| 投稿を削除する | DELETE /api/posts/1 | 204 No Content |
| 存在しない投稿を取得する | GET /api/posts/9999 | 404 Not Found |
| 未ログインでアクセスする | GET /api/profile | 401 Unauthorized |
| 権限がない操作をする | DELETE /api/posts/1 | 403 Forbidden |
APIを作る場合は、処理内容に合ったステータスコードを返すと、フロントエンド側で結果を判定しやすくなります。
JavaScriptのfetchでステータスコードを確認する
JavaScriptでAPIを呼び出す場合、fetchのレスポンスからステータスコードを確認できます。
async function getPosts() {
const response = await fetch("/api/posts");
console.log(response.status);
const posts = await response.json();
console.log(posts);
}
getPosts();
response.statusには、200や404などの数字が入ります。
response.okを使うと、成功したレスポンスかどうかを判定できます。
async function getPosts() {
const response = await fetch("/api/posts");
if (!response.ok) {
console.log("エラーが発生しました");
console.log(response.status);
return;
}
const posts = await response.json();
console.log(posts);
}
getPosts();
response.okは、ステータスコードが200から299の範囲ならtrueになります。
Chrome開発者ツールで確認する方法
ブラウザでもHTTPステータスコードを確認できます。
Google Chromeの場合は、開発者ツールのNetworkタブを使います。
- 確認したいページを開く
- 右クリックして「検証」をクリックする
- 「Network」タブを開く
- ページを再読み込みする
- 一覧から確認したいリクエストをクリックする
- Status Codeを確認する
HTML、CSS、JavaScript、画像、API通信など、それぞれのリクエストに対してステータスコードが表示されます。
ページが表示されない場合や、API通信が失敗している場合は、まずNetworkタブを見ると原因を探しやすくなります。
WordPressでよく見るステータスコード
WordPressサイトを運営していると、次のステータスコードを見ることがあります。
| コード | よくある場面 |
|---|---|
200 | 記事や固定ページが正常に表示されている |
301 | URL変更やhttpからhttpsへの転送 |
404 | 削除した記事、リンク切れ、存在しないURL |
500 | テーマ、プラグイン、PHP、設定ファイルのエラー |
503 | メンテナンス中、サーバー過負荷、一時的な停止 |
記事URLを変更した場合、古いURLをそのまま放置すると404になります。
古いURLから新しいURLへ移動させたい場合は、301リダイレクトを設定します。
よく使うHTTPステータスコード一覧
Web制作やAPI開発でよく使うステータスコードをまとめます。
| コード | 名前 | 意味 |
|---|---|---|
200 | OK | 成功 |
201 | Created | 新規作成された |
204 | No Content | 成功したが返す本文がない |
301 | Moved Permanently | 恒久的なリダイレクト |
302 | Found | 一時的なリダイレクト |
304 | Not Modified | 変更なし |
400 | Bad Request | リクエストが不正 |
401 | Unauthorized | 認証が必要 |
403 | Forbidden | 権限がない |
404 | Not Found | 見つからない |
405 | Method Not Allowed | 許可されていないHTTPメソッド |
429 | Too Many Requests | リクエストが多すぎる |
500 | Internal Server Error | サーバー内部エラー |
502 | Bad Gateway | ゲートウェイで問題が起きた |
503 | Service Unavailable | 一時的に利用できない |
504 | Gateway Timeout | 応答が時間切れになった |
まとめ
HTTPステータスコードは、サーバーがリクエストに対して返す処理結果の数字です。
先頭の数字によって、大きく意味が分かれます。
| 分類 | 意味 |
|---|---|
100番台 | 処理を継続している |
200番台 | 成功 |
300番台 | リダイレクト |
400番台 | クライアント側のエラー |
500番台 | サーバー側のエラー |
まず覚えたいステータスコードは、次の通りです。
200 OK:成功201 Created:新規作成204 No Content:成功したが返す本文なし301 Moved Permanently:恒久的なリダイレクト302 Found:一時的なリダイレクト400 Bad Request:リクエストが不正401 Unauthorized:認証が必要403 Forbidden:権限がない404 Not Found:見つからない500 Internal Server Error:サーバー内部エラー503 Service Unavailable:一時的に利用できない
Webページが表示されないとき、API通信が失敗したとき、WordPressでエラーが出たときは、HTTPステータスコードを確認すると原因を探しやすくなります。
Chromeの開発者ツールでは、Networkタブから各リクエストのステータスコードを確認できます。

