MiServe DevTools

あなたのステッカー

ツールをここにピン留めできます。このブラウザに保存されます。

HTTP ステータスコード一覧

100 から 511 までの HTTP ステータスコードについて、開発者にとっての意味と定義元の RFC をまとめました。nginx や Cloudflare などが使う非標準のコードも載せています。

全 78 件のステータスコード

1xx 情報

サーバーはリクエストを受け取り、まだ処理を続けています。最終的なレスポンスの前に送られる暫定レスポンスです。

100 Continue
サーバーがリクエストヘッダーを受け取ったので、クライアントはボディを送ってかまいません。大きなデータをアップロードする前に、クライアントが Expect: 100-continue を送ってこの応答を求めます。 RFC 9110
101 Switching Protocols
Upgrade ヘッダーの要求どおり、サーバーがこの接続のプロトコルを切り替えることに同意しました。WebSocket の接続はこれで始まります。 RFC 9110
102 Processing
サーバーが WebDAV のリクエストを受け付けてまだ処理中であることを伝え、クライアントがタイムアウトしないようにします。現在の WebDAV 仕様には含まれておらず、送られることはほとんどありません。 RFC 2518
103 Early Hints
最終的なレスポンスの前に Link ヘッダー付きで送られます。サーバーがページを準備している間に、ブラウザがリソースのプリロードや接続の確立を始められます。 RFC 8297

2xx 成功

リクエストは受信、理解され、受け入れられました。

200 OK
リクエストは成功しました。ボディには結果が入ります。GET ならリソース、POST なら処理の結果です。 RFC 9110
201 Created
リクエストによって新しいリソースが作成されました。通常、その URL は Location ヘッダーで示されます。 RFC 9110
202 Accepted
リクエストは処理のために受け付けられましたが、処理はまだ終わっておらず、失敗する可能性もあります。キューに入れる処理でよく使われます。 RFC 9110
203 Non-Authoritative Information
リクエストは成功しましたが、オリジンサーバーが送ったレスポンスをプロキシが変更しています。 RFC 9110
204 No Content
リクエストは成功し、返すボディはありません。DELETE や、クライアントがすでに新しい状態を持っている場合の PUT や PATCH でよく使われます。 RFC 9110
205 Reset Content
リクエストは成功しました。クライアントは、フォームをクリアするなどして、送信元の画面をリセットしてください。ボディはありません。 RFC 9110
206 Partial Content
ボディには Range ヘッダーで要求されたバイト範囲だけが入っています。ダウンロードの再開や動画のシークに使われます。 RFC 9110
207 Multi-Status
ボディは、複数のリソースそれぞれのステータスを含む XML 文書です。WebDAV で使われます。 RFC 4918
208 Already Reported
WebDAV の Multi-Status レスポンスの中で、すでに列挙済みのバインディングのメンバーを示し、重複を避けます。 RFC 5842
226 IM Used
ボディは、現在のリソースに差分などのインスタンス操作を 1 つ以上適用した結果です。HTTP のデルタエンコーディングの一部ですが、実装されることはほとんどありません。 RFC 3229

3xx リダイレクト

リクエストを完了するには、クライアント側でさらに操作が必要です。多くの場合、別の URL へのリクエストです。

300 Multiple Choices
リソースに複数の表現があり、クライアントがその中から選べます。選び方の標準的な方法がないため、ほとんど使われません。 RFC 9110
301 Moved Permanently
恒久的なリダイレクトです。リソースは Location ヘッダーで示される新しい URL に移っており、検索エンジンは通常、元の URL の代わりにその URL をインデックスします。リダイレクトをたどる際にクライアントが POST を GET に変えることがあるため、メソッドを保つには 308 を使います。 RFC 9110
302 Found
一時的なリダイレクトです。リソースは今のところ Location ヘッダーで示される別の URL にあります。リダイレクトをたどる際にクライアントが POST を GET に変えることがあるため、メソッドを保つには 307 を使います。 RFC 9110
303 See Other
応答は別の URL にあり、クライアントはそれを GET で取得します。フォームを POST した後の一般的なリダイレクトで、ページを再読み込みしてもフォームが再送信されないようにします。 RFC 9110
304 Not Modified
クライアントのキャッシュにあるコピーがまだ最新なので、ボディは送られません。If-None-Match や If-Modified-Since を使った条件付きリクエストへの応答です。 RFC 9110
305 Use Proxy
リソースには Location ヘッダーで指定されたプロキシを経由してアクセスする必要があります。セキュリティ上の理由で非推奨となっており、クライアントはこれに頼るべきではありません。 RFC 9110
306 (Unused)
以前の仕様で使われていたコードです。現在は使われておらず、番号は予約されたままです。 RFC 9110
307 Temporary Redirect
リソースは一時的に別の URL にあります。クライアントは同じメソッドとボディでそこへリクエストし直す必要があります。 RFC 9110
308 Permanent Redirect
リソースは新しい URL に恒久的に移りました。クライアントは同じメソッドとボディでそこへリクエストし直す必要があります。 RFC 9110

4xx クライアントエラー

リクエストにクライアント側の問題があります。形式が正しくない、権限がない、または応答できないものを求めているといった場合です。

400 Bad Request
リクエストの形式が不正なため、サーバーが処理できません。構文の誤り、不正なフレーミング、解析できないボディなどが原因です。 RFC 9110
401 Unauthorized
リクエストに有効な認証情報がありません。認証方法はレスポンスの WWW-Authenticate ヘッダーで示されます。名前に反して、このコードが扱うのは権限ではなく認証です。 RFC 9110
402 Payment Required
将来の利用のために予約されています。サブスクリプションの終了時や有料の利用枠を使い切ったときに、これを返す API もあります。 RFC 9110
403 Forbidden
サーバーはリクエストを理解したうえで拒否しています。リクエストに認証情報が含まれていても、このリソースへのアクセス権はなく、送り直しても結果は変わりません。 RFC 9110
404 Not Found
サーバーのこの URL には何もないか、あってもそれを明かしたくない場合に返されます。存在しない状態が恒久的かどうかは示しません。 RFC 9110
405 Method Not Allowed
リソースは存在しますが、このメソッドには対応していません。対応しているメソッドは Allow ヘッダーに列挙されます。 RFC 9110
406 Not Acceptable
リクエストの Accept、Accept-Language、Accept-Encoding ヘッダーの条件を満たすレスポンスをサーバーが生成できません。 RFC 9110
407 Proxy Authentication Required
401 と同様ですが、Proxy-Authenticate ヘッダーの指示に従ってプロキシで認証する必要があります。 RFC 9110
408 Request Timeout
サーバーが待てる時間内にリクエスト全体を受け取れなかったため、接続を閉じます。 RFC 9110
409 Conflict
リクエストがリソースの現在の状態と矛盾しています。古いバージョンをもとにした編集や、一意であるべき値の重複などです。 RFC 9110
410 Gone
リソースは以前ここにありましたが、完全に削除されました。404 と違い、クライアントや検索エンジンにこの URL を破棄してよいことを伝えます。 RFC 9110
411 Length Required
Content-Length ヘッダーがないため、サーバーがリクエストを拒否しています。 RFC 9110
412 Precondition Failed
If-Match や If-Unmodified-Since などのヘッダーの条件が偽だったため、リクエストは適用されませんでした。ほかの人の変更を上書きしてしまうのを防ぎます。 RFC 9110
413 Content Too Large
リクエストボディがサーバーの受け付ける上限を超えています。多くはサーバー自身かその前段のプロキシのアップロード上限が原因です。以前の名前は Payload Too Large でした。 RFC 9110
414 URI Too Long
URL がサーバーの受け付ける長さを超えています。本来 POST のボディに入れるべきデータがクエリ文字列に入っていることがよくあります。 RFC 9110
415 Unsupported Media Type
Content-Type または Content-Encoding ヘッダーで示されたリクエストボディの形式を、サーバーが受け付けません。 RFC 9110
416 Range Not Satisfiable
Range ヘッダーがリソースの範囲外のバイトを要求しています。 RFC 9110
417 Expectation Failed
リクエストの Expect ヘッダーで示された要件をサーバーが満たせません。 RFC 9110
418 I'm a teapot
Hyper Text Coffee Pot Control Protocol に由来するエイプリルフールのジョークで、ティーポットがコーヒーを淹れるのを断るというものです。RFC 9110 ではこの番号を未使用として予約しています。ジョークとして使われすぎて、別の意味を与えられないためです。 RFC 2324, RFC 9110
421 Misdirected Request
このホスト名に応答するよう設定されていないサーバーにリクエストが届きました。ブラウザが HTTP/2 の接続を別のホストに再利用したときに起こることがあり、クライアントは新しい接続で再試行できます。 RFC 9110
422 Unprocessable Content
リクエストの構文は正しいものの、内容が不正です。たとえば JSON のボディがバリデーションに通らない場合です。WebDAV に由来し、そこでの名前は Unprocessable Entity でした。 RFC 9110, RFC 4918
423 Locked
WebDAV のリソースがロックされているため、メソッドを適用できません。 RFC 4918
424 Failed Dependency
依存していた別の操作が失敗したため、この WebDAV リソースに対するメソッドは実行されませんでした。 RFC 4918
425 Too Early
TLS の early data で届いたリクエストはリプレイの可能性があるため、サーバーは処理しません。クライアントはハンドシェイクの完了後に送り直してください。 RFC 8470
426 Upgrade Required
サーバーはこのプロトコルでのリクエストを拒否し、クライアントが切り替えるべきプロトコルを Upgrade ヘッダーで示します。 RFC 9110
428 Precondition Required
サーバーは If-Match などを使った条件付きリクエストを求めています。更新によって新しいバージョンが知らないうちに上書きされるのを防ぐためです。 RFC 6585
429 Too Many Requests
クライアントが一定時間内に送ったリクエストが多すぎます。これをレート制限といいます。待つべき時間が Retry-After ヘッダーで示されることがあります。 RFC 6585
431 Request Header Fields Too Large
ヘッダー全体、またはそのうちの 1 つがサーバーの受け付けるサイズを超えています。よくある原因は大きすぎる Cookie です。 RFC 6585
451 Unavailable For Legal Reasons
裁判所命令などの法的な要求により、サーバーがアクセスを拒否しています。番号は小説『華氏 451 度』にちなみます。 RFC 7725

5xx サーバーエラー

リクエストは正しいかもしれませんが、サーバーまたはその前段のゲートウェイが処理に失敗しました。

500 Internal Server Error
サーバーで想定外の状況が発生しました。多くは処理されなかった例外です。原因はサーバーのログで確認します。 RFC 9110
501 Not Implemented
リクエストに必要な機能にサーバーが対応していません。たとえば、認識できないメソッドの場合です。 RFC 9110
502 Bad Gateway
ゲートウェイまたはプロキシが、背後のサーバーから不正なレスポンスを受け取りました。プロキシの背後のアプリケーションがクラッシュしているか、待ち受けていないことがよくあります。 RFC 9110
503 Service Unavailable
過負荷やメンテナンスのため、サーバーは現在リクエストを処理できません。再試行できる時期が Retry-After ヘッダーで示されることがあります。 RFC 9110
504 Gateway Timeout
ゲートウェイまたはプロキシが、背後のサーバーから時間内にレスポンスを受け取れませんでした。アプリケーションが遅すぎるか、到達できないことがよくあります。 RFC 9110
505 HTTP Version Not Supported
リクエストで使われた HTTP のメジャーバージョンにサーバーが対応していません。 RFC 9110
506 Variant Also Negotiates
サーバーの設定ミスです。透過的コンテントネゴシエーションで選ばれたバリアント自体がネゴシエーションを行うよう設定されており、ループになっています。 RFC 2295
507 Insufficient Storage
リクエストを完了するのに必要なデータをサーバーが保存できません。WebDAV 向けに定義されています。 RFC 4918
508 Loop Detected
バインディングをたどる途中で無限ループを検出したため、サーバーが WebDAV の操作を中止しました。 RFC 5842
510 Not Extended
サーバーが必要とする拡張がリクエストにありません。このコードを定義した仕様は現在 Historic となっており、IANA のレジストリでも廃止扱いです。 RFC 2774
511 Network Authentication Required
ネットワークを利用するにはクライアントの認証が必要です。ホテルの Wi-Fi のサインインページのようなキャプティブポータルが返すもので、アクセスしようとしたサイトが返すものではありません。 RFC 6585

非標準のコード

これらのコードは IANA のレジストリにはありません。それぞれ特定のサーバーやサービスのもので、意味が通じるのはその中だけです。

419 Page Expired 非標準
フォームの CSRF トークンがないか期限切れのときに Laravel が返します。 Laravel
444 No Response 非標準
nginx の設定で 444 を返すと、レスポンスを送らずに接続を閉じます。nginx のログには記録されますが、クライアントには何も届きません。 nginx
494 Request Header Too Large 非標準
リクエストヘッダーがバッファに収まらないときに nginx が内部で使います。クライアントには 400 レスポンスが返ります。 nginx
495 SSL Certificate Error 非標準
クライアント証明書の検証に失敗したときに nginx が内部で使います。設定で処理しない限り、クライアントには 400 レスポンスが返ります。 nginx
496 SSL Certificate Required 非標準
サーバーが要求する証明書をクライアントが提示しなかったときに nginx が内部で使います。 nginx
497 HTTP Request Sent to HTTPS Port 非標準
HTTPS を想定したポートに平文の HTTP リクエストが届いたときに nginx が内部で使います。 nginx
499 Client Closed Request 非標準
サーバーが応答する前にクライアントが接続を閉じたときに nginx がログに記録します。クライアントのタイムアウトがアプリケーションの処理時間より短いことを示している場合がよくあります。 nginx
509 Bandwidth Limit Exceeded 非標準
サイトが帯域幅の割り当てを使い切ったときに、cPanel などのホスティング管理パネルが返します。 cPanel
520 Web Server Returned an Unknown Error 非標準
オリジンサーバーが空のレスポンス、不明なレスポンス、または想定外のレスポンスを返したときに Cloudflare が返します。 Cloudflare
521 Web Server Is Down 非標準
オリジンサーバーが Cloudflare からの接続を拒否したときに Cloudflare が返します。 Cloudflare
522 Connection Timed Out 非標準
オリジンサーバーへの TCP 接続を時間内に確立できなかったときに Cloudflare が返します。 Cloudflare
523 Origin Is Unreachable 非標準
DNS レコードの誤りやルーティングの問題などで、オリジンサーバーに到達できなかったときに Cloudflare が返します。 Cloudflare
524 A Timeout Occurred 非標準
Cloudflare はオリジンサーバーに接続しましたが、オリジンが時間内に HTTP レスポンスを返しませんでした。 Cloudflare
525 SSL Handshake Failed 非標準
Cloudflare とオリジンサーバーの間の TLS ハンドシェイクが失敗したときに Cloudflare が返します。 Cloudflare
526 Invalid SSL Certificate 非標準
オリジンサーバーの TLS 証明書を検証できなかったときに Cloudflare が返します。 Cloudflare

ブラウザ内で動作します。貼り付けた内容はアップロードされません。

このツールについて

ステータスコードの分類

HTTP レスポンスはすべて 3 桁のステータスコードで始まります。最初の桁がクラスを表し、1xx は暫定的な応答、2xx は成功、3xx は別の場所へ行くようクライアントに求めるもの、4xx はリクエスト側の問題、5xx はサーバー側の問題を示します。クライアントは知らないコードを受け取った場合、そのクラスの最初のコードと同じように扱う必要があります。たとえば未知の 4xx は 400 として扱われます。

Not Found のように番号の後に続くテキストは、リーズンフレーズと呼ばれます。これは人間向けの説明にすぎず、クライアントは無視することになっています。HTTP/2 と HTTP/3 ではそもそも送られません。この一覧にある標準コードの名前は IANA のレジストリのものですが、418 だけは例外で、レジストリでは (Unused) となっています。

混同しやすいコード

401 と 403。401 は、サーバーが相手を特定できておらず、認証すれば解決する可能性があることを意味します。403 は、サーバーがリクエストを拒否しており、認証し直しても結果は変わらないことを意味します。

301、302、307、308。301 と 308 は恒久的、302 と 307 は一時的なリダイレクトです。301 と 302 では、リダイレクトをたどる際にクライアントが POST を GET に変えることがあります。307 と 308 では同じメソッドとボディを使う必要があります。

502 と 504。どちらもアプリケーションの前段にあるプロキシやロードバランサーが返します。502 はプロキシが不正なものを受け取ったか接続に失敗した場合、504 は待っても時間内に何も返ってこなかった場合です。

404 と 410。404 は、ここには何もない(一時的な場合もある)ことを示します。410 は、リソースが完全に削除されたことを示します。

この一覧の出典

標準のコードは IANA の HTTP Status Code Registry に基づいています。ほとんどは、2022 年に RFC 7231 を置き換えた RFC 9110(HTTP Semantics)で定義されています。それ以外は WebDAV や小規模な拡張仕様に由来し、各項目に定義元の RFC を記載しています。まだ Internet-Draft の段階にある仮登録のコードは含めていません。最後のグループは、登録されていないものの、nginx や Cloudflare などのログやエラーページに現れるコードです。

一覧全体がページに含まれているため、JavaScript なしでも読めます。検索フィールドによる絞り込みはブラウザ内で行われます。

よくある質問

401 と 403 の違いは何ですか?

401 Unauthorized は、リクエストに有効な認証情報がないことを意味し、クライアントは認証してから再試行できます。403 Forbidden は、サーバーがリクエストを理解したうえで拒否していることを意味します。送られた認証情報ではアクセスできないため、送り直しても結果は変わりません。

恒久的なリダイレクトには 301 と 308 のどちらを使うべきですか?

どちらも、URL が恒久的に移転したことをクライアントと検索エンジンに伝えます。301 ではリダイレクトをたどる際にクライアントが POST を GET に変えることが許されますが、308 では同じメソッドとボディが必須です。GET でリクエストされる通常のページの URL であれば、両者の動作は同じです。

502 と 504 の違いは何ですか?

どちらもアプリケーションではなく、プロキシ、ゲートウェイ、ロードバランサーが返します。502 Bad Gateway は、背後のサーバーが不正なレスポンスを返したか、接続を拒否したことを意味します。504 Gateway Timeout は、プロキシの制限時間内に応答がなかったことを意味します。

499 は本物の HTTP ステータスコードですか?

IANA には登録されていません。レスポンスを送る前にクライアントが接続を閉じたとき、nginx がアクセスログに 499 を書き込むもので、クライアントが受け取ることはありません。Cloudflare の 520〜526 のように、ほかの製品もレジストリ外の番号を同じように使っています。

ネットワークのほかのツール