HTTP ステータスコード — 意味と例付きの完全一覧

100 から 511 までのすべての公式 HTTP ステータスコードと、nginx・Cloudflare・AWS のコードを、それぞれの使いどころとともに掲載。

91 件のコード

1xx 情報

100Continue

暫定レスポンス:サーバーがリクエストヘッダーを受け取ったので、クライアントはそのままボディを送信してよいことを示します。

使う場面

クライアントが大きなボディをアップロードする前に「Expect: 100-continue」を付けたときにサーバーが自動的に送信します。これにより、拒否されるリクエストで帯域を無駄にせずに済みます。

使わない場面

アプリケーションコードから最終ステータスとして送信しないでください。これはリクエストへの応答そのものではなく、本来のレスポンスの前段階にすぎません。

キャッシュ

該当なし

定義元

RFC 9110 §15.2.1

例
PUT /upload HTTP/1.1
Content-Length: 104857600
Expect: 100-continue

HTTP/1.1 100 Continue
101Switching Protocols

サーバーが、Upgrade ヘッダーで指定されたプロトコルへの接続の切り替えに同意したことを示します。

使う場面

WebSocket 接続(Upgrade: websocket)のハンドシェイクのレスポンス。かつては HTTP/1.1 から h2c へのアップグレードにも使われました。

使わない場面

HTTP/2 と HTTP/3 では使われません。HTTP/2 上の WebSocket は代わりに拡張 CONNECT メソッド(RFC 8441)を使います。

キャッシュ

該当なし

定義元

RFC 9110 §15.2.2

例
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
102Processing非推奨

サーバーが時間のかかる WebDAV リクエストをまだ処理中であり、クライアントはタイムアウトすべきでないことを伝える暫定レスポンスです。

WebDAV。RFC 4918 で WebDAV から削除されましたが、IANA レジストリには残っています。

使う場面

深い COPY や MOVE など、時間のかかる再帰的な操作を処理するレガシーな WebDAV サーバーでのみ使われます。

使わない場面

新しい API では、長時間かかる処理には代わりにステータス確認用 URL 付きの 202 Accepted を返しましょう。

キャッシュ

該当なし

定義元

RFC 2518 §10.1

例
HTTP/1.1 102 Processing
103Early Hints

Link ヘッダーを含む暫定レスポンスで、サーバーが最終レスポンスを準備している間に、ブラウザがプリロードや事前接続を始められるようにします。

使う場面

HTML の生成に時間がかかり(サーバーサイドレンダリング、データベースクエリ)、ページに必要な CSS、フォント、オリジンが事前にわかっている場合。Chromium 系ブラウザと Firefox は 103 レスポンスの preload と preconnect のヒントに対応し、Safari は preconnect に対応しています。

使わない場面

Set-Cookie のように最終レスポンスにのみ適用すべきヘッダーを含めないでください。ブラウザは 103 内のほとんどのヘッダーを無視します。

キャッシュ

該当なし

定義元

RFC 8297

例
HTTP/1.1 103 Early Hints
Link: </style.css>; rel=preload; as=style
Link: <https://cdn.example.com>; rel=preconnect

HTTP/1.1 200 OK
Content-Type: text/html
104Upload Resumption Supported

開始したアップロードを後で再開できること、およびその再開先を伝える暫定レスポンスです。

IETF の再開可能アップロードのドラフトに対する IANA の暫定登録。まだ正式な RFC ではありません。

使う場面

実験的:再開可能アップロードのドラフトを実装したサーバーが、アップロードリソースを示す Location ヘッダーとともに送信します。

使わない場面

ドラフトが RFC として公開されるまでは一般的な用途には向きません。ほとんどのクライアントやプロキシはこのコードを認識しません。

キャッシュ

該当なし

定義元

draft-ietf-httpbis-resumable-upload

例
HTTP/1.1 104 Upload Resumption Supported
Upload-Draft-Interop-Version: 6
Location: https://example.com/upload/b530ce8ff

2xx 成功

200OKデフォルトでキャッシュ可能

リクエストが成功しました。ボディの内容はメソッドによって異なり、GET ならリソース、POST なら処理の結果です。

使う場面

GET の通常の成功レスポンス。POST、PUT、PATCH、DELETE で結果を説明するボディを返す場合にも使います。

使わない場面

ボディにエラーメッセージを入れて 200 を返さないでください(「ソフトエラー」)。クライアント、監視ツール、キャッシュ、検索エンジンが見るのはステータスコードであり、JSON の中身ではありません。

キャッシュ

デフォルトでキャッシュ可能(ヒューリスティックにキャッシュ可能)

定義元

RFC 9110 §15.3.1

例
HTTP/1.1 200 OK
Content-Type: application/json

{"id": 42, "name": "Ada"}
201Created

リクエストが成功し、1 つ以上の新しいリソースが作成されました。

使う場面

何かを作成する POST(または新しい URL への PUT)の後に使います。新しいリソースを指す Location ヘッダーを含め、ボディには通常そのリソースの説明を入れます。

使わない場面

既存レコードの更新など、新しく何も作成されていない場合には使わないでください(200 または 204 を使います)。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 9110 §15.3.2

例
HTTP/1.1 201 Created
Location: /users/42
Content-Type: application/json

{"id": 42}
202Accepted

リクエストは処理のために受理されましたが、処理はまだ完了しておらず、失敗する可能性もあります。

使う場面

キューに入れる処理や非同期処理:動画のエンコード、レポートの生成、一括インポートなど。クライアントがジョブの状態を確認できるリンクを返しましょう。

使わない場面

同期処理の「成功」の意味で使わないでください。このコードは結果について何も約束しないことを明示しています。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 9110 §15.3.3

例
HTTP/1.1 202 Accepted
Location: /jobs/7f3a
Content-Type: application/json

{"status": "queued"}
203Non-Authoritative Informationデフォルトでキャッシュ可能

成功ですが、変換を行うプロキシがオリジンサーバーの 200 レスポンスを変更しています。

使う場面

画像を圧縮したり HTML を書き換えたりするプロキシなど、コンテンツを変更する中継サーバーが、オリジンのレスポンスそのままではないことをクライアントに伝えるためにのみ使います。

使わない場面

オリジンサーバーや API は送信すべきではありません。

キャッシュ

デフォルトでキャッシュ可能(ヒューリスティックにキャッシュ可能)

定義元

RFC 9110 §15.3.4

例
HTTP/1.1 203 Non-Authoritative Information
Content-Type: image/webp
204No Contentデフォルトでキャッシュ可能

成功で、意図的にボディがありません。

使う場面

成功した DELETE、更新後のリソースを返さない PUT や PATCH、フォームの自動保存、CORS のプリフライトレスポンスなど。

使わない場面

ボディを含めてはいけません。クライアントは読み込まず、HTTP/1.1 では余分なボディがその接続上の次のレスポンスを壊してしまいます。返すものがある場合は 200 を使ってください。

キャッシュ

デフォルトでキャッシュ可能(ヒューリスティックにキャッシュ可能)

定義元

RFC 9110 §15.3.5

例
HTTP/1.1 204 No Content
205Reset Content

成功です。クライアントは文書の表示をリセット(例:送信したフォームをクリア)すべきことを示します。

使う場面

ユーザーがフォームを送信した直後に次のレコードを入力するようなデータ入力画面。

使わない場面

ブラウザはリセット動作を実装していないため、実際には 204 と同じように動作します。ボディを含めてはいけません。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 9110 §15.3.6

例
HTTP/1.1 205 Reset Content
206Partial Contentデフォルトでキャッシュ可能

サーバーは、クライアントが Range ヘッダーで要求したバイト範囲のみを返しています。

使う場面

動画や音声のシーク、再開可能なダウンロード、ファイルを並列に分割取得するダウンロードマネージャー。Content-Range を含めます。

使わない場面

リクエストに Range ヘッダーがあり、それに応じる場合以外は送信しないでください。Range を無視する場合は、ボディ全体とともに 200 を送ります。

キャッシュ

デフォルトでキャッシュ可能(ヒューリスティックにキャッシュ可能)

定義元

RFC 9110 §15.3.7

例
GET /video.mp4 HTTP/1.1
Range: bytes=0-1023

HTTP/1.1 206 Partial Content
Content-Range: bytes 0-1023/146515
Content-Length: 1024
207Multi-Status

ボディ(XML)に、複数のリソースそれぞれのステータスが個別に含まれています。

WebDAV

使う場面

PROPFIND など、多数のリソースを対象とする WebDAV の操作。一部の JSON API はバッチ用エンドポイントに流用しています。

使わない場面

バッチ API では、汎用クライアントが 207 を単なる成功として扱うため、項目ごとの結果を含む 200 を好むチームが多くあります。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 4918 §11.1

例
HTTP/1.1 207 Multi-Status
Content-Type: application/xml; charset="utf-8"
208Already Reported

207 レスポンスの中で、あるリソースがすでに前に列挙されているため繰り返さないことを示します(バインディングによるループを防ぎます)。

WebDAV

使う場面

バインディング(RFC 5842)に対応した WebDAV サーバー。

使わない場面

WebDAV 以外では、トップレベルのレスポンスとして意味を持ちません。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 5842 §7.1

例
<D:status>HTTP/1.1 208 Already Reported</D:status>
226IM Used

サーバーが GET に対して、リソース全体ではなく、現在のリソースに差分(インスタンス操作)を適用した結果で応答しました。

使う場面

HTTP の差分エンコーディング(A-IM / IM ヘッダー)。導入例はほとんどありません。

使わない場面

ブラウザは対応していません。通常の API では使わないでください。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 3229 §10.4.1

例
HTTP/1.1 226 IM Used
IM: vcdiff
ETag: "v2"

3xx リダイレクト

300Multiple Choicesデフォルトでキャッシュ可能

リソースに複数の表現があり、クライアント(またはユーザー)がその中から選ぶ必要があります。

使う場面

まれ:エージェント駆動型のコンテンツネゴシエーション。たとえば、文書を複数の言語や形式で提供し、それぞれへのリンクを示す場合など。

使わない場面

ブラウザは自動では選択しません。言語や形式の選択には、サーバー駆動型のネゴシエーションか、リンクを並べた通常のページのほうが適しています。

キャッシュ

デフォルトでキャッシュ可能(ヒューリスティックにキャッシュ可能)

定義元

RFC 9110 §15.4.1

例
HTTP/1.1 300 Multiple Choices
Link: </doc.en.html>; rel=alternate; hreflang=en
Link: </doc.fr.html>; rel=alternate; hreflang=fr
301Moved Permanentlyデフォルトでキャッシュ可能

リソースに新しい恒久的な URL があり、Location ヘッダーで示されます。

使う場面

ドメインの移転、HTTP から HTTPS への移行、スラッグの変更、重複 URL の統合。検索エンジンは評価シグナルを新しい URL に引き継ぎます。

使わない場面

ブラウザは 301 をたどる際に POST を GET に変えることがあります。メソッドを維持する必要がある場合(移動した API エンドポイントなど)は 308 を使ってください。ブラウザは 301 を積極的にキャッシュするので、デプロイ前にテストしましょう。

キャッシュ

デフォルトでキャッシュ可能(ヒューリスティックにキャッシュ可能)

定義元

RFC 9110 §15.4.2

例
HTTP/1.1 301 Moved Permanently
Location: https://www.example.com/new-page
302Found

リソースは一時的に別の URL にあります。今後も元の URL を使い続けてください。

使う場面

一時的なリダイレクト:ログインへのリダイレクト、A/B テスト、メンテナンスページ、地域や言語によるリダイレクト。

使わない場面

ブラウザは 302 をたどる際に POST を GET に変えます(RFC が許容する歴史的な挙動)。POST 後に「結果を見に行く」場合は 303 を、メソッドを維持する必要がある場合は 307 を使ってください。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 9110 §15.4.3

例
HTTP/1.1 302 Found
Location: /login?next=%2Faccount
303See Other

クライアントを別の URL にリダイレクトし、その URL を GET で取得させます。

使う場面

Post/Redirect/Get パターン:フォームの POST 後に結果ページへの 303 を返し、ページを再読み込みしてもフォームが再送信されないようにします。

使わない場面

コンテンツの移動には使いません。元の URL が移動したことは何も示しません。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 9110 §15.4.4

例
HTTP/1.1 303 See Other
Location: /orders/1234
304Not Modified

条件付き GET または HEAD(If-None-Match または If-Modified-Since)へのレスポンス:クライアントのキャッシュはまだ有効です。

キャッシュの再検証:このレスポンス自体は保存されませんが、クライアントがすでに持っているキャッシュ済みレスポンスを更新します。

使う場面

ETag や Last-Modified の日付が一致したときにサーバーや CDN が自動的に返し、変更のないボディの転送を省きます。

使わない場面

ボディを送ってはいけません。条件付きでないリクエストには送らないでください。クライアントには再利用できるものがありません。

キャッシュ

該当なし

定義元

RFC 9110 §15.4.5

例
GET /app.js HTTP/1.1
If-None-Match: "33a64df5"

HTTP/1.1 304 Not Modified
ETag: "33a64df5"
Cache-Control: max-age=3600
305Use Proxy非推奨

非推奨。かつては、Location で指定したプロキシ経由でリクエストを再送するようクライアントに指示していました。

使う場面

なし。セキュリティ上の理由で非推奨となり、ブラウザは無視します。

使わない場面

送信しないでください。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 9110 §15.4.6

例
HTTP/1.1 305 Use Proxy
306(Unused)非推奨

予約済み。ドラフトで「Switch Proxy」として使われていましたが、現在は使われていません。

使う場面

なし。

使わない場面

送信しないでください。

キャッシュ

該当なし

定義元

RFC 9110 §15.4.7

307Temporary Redirect

一時的なリダイレクトで、クライアントは同じメソッドとボディでリクエストを再送する必要があります。

使う場面

POST、PUT、DELETE リクエストの一時的なリダイレクト(メンテナンスのために移動した API エンドポイントなど)。HSTS により HTTPS が強制される場合も、ブラウザは内部的に 307 を表示します。

使わない場面

恒久的な移動には 308 を使います。「GET で結果を取得しに行く」場合は 303 を使います。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 9110 §15.4.8

例
HTTP/1.1 307 Temporary Redirect
Location: https://api2.example.com/v1/orders
308Permanent Redirectデフォルトでキャッシュ可能

恒久的なリダイレクトで、クライアントは同じメソッドとボディでリクエストを再送する必要があります。

使う場面

POST や PUT を受け付ける、恒久的に移動した API エンドポイント。検索エンジンは 301 と同様に扱います。Next.js と Vercel は、恒久的なリダイレクトにデフォルトで 308 を使います。

使わない場面

非常に古いクライアント(Windows 7 以前の Internet Explorer)は理解できません。通常のページ移動なら 301 でも同様に機能します。

キャッシュ

デフォルトでキャッシュ可能(ヒューリスティックにキャッシュ可能)

定義元

RFC 9110 §15.4.9

例
HTTP/1.1 308 Permanent Redirect
Location: https://example.com/api/v2/upload

4xx クライアントエラー

400Bad Request

クライアント側のエラー(構文の誤り、不正なフレーミング、不正なパラメーター)のため、サーバーはリクエストを処理しません。

使う場面

解析できない JSON、必須パラメーターの欠落、型の誤った値。ボディで問題を説明しましょう(RFC 9457 の problem+json がよい形式です)。

使わない場面

形式は正しいがビジネスルールに反する入力には、多くの API が 422 を使います。認証の問題には 401 または 403 を使います。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 9110 §15.5.1

例
HTTP/1.1 400 Bad Request
Content-Type: application/problem+json

{"title": "Invalid JSON", "detail": "Unexpected token } at position 41"}
401Unauthorized

リクエストに有効な認証情報がありません。名前に反して、意味は「未認証」です。

使う場面

トークンがない、トークンの期限切れ、パスワードの誤り。レスポンスには、認証方法を示す WWW-Authenticate ヘッダーを含める必要があります。

使わない場面

ユーザーがログイン済みでも権限がない場合は 403 を使います。WWW-Authenticate なしで 401 を送らないでください。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 9110 §15.5.2

例
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="api", error="invalid_token"
402Payment Required

将来の使用のために予約されています。標準的な意味は定められていません。

使う場面

一部の API は「利用枠を使い切ったのでプランをアップグレードしてください」や支払いの失敗に使います(Stripe はカードが拒否されたリクエストに 402 を返します)。

使わない場面

クライアントがこのコードを理解することを当てにせず、ボディで問題を説明してください。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 9110 §15.5.3

例
HTTP/1.1 402 Payment Required
Content-Type: application/json

{"error": "card_declined"}
403Forbidden

サーバーはリクエストを理解し、相手が誰かもわかっている(または気にしていない)うえで、実行を拒否しています。

使う場面

認証済みユーザーに権限がない、IP がブロックされている、ディレクトリ一覧が無効、WAF のルールが作動したなど。再認証しても解決しません。

使わない場面

認証情報がない、または無効な場合は 401 を使います。リソースの存在を明かすこと自体が情報漏えいになる場合は、代わりに 404 を返します。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 9110 §15.5.4

例
HTTP/1.1 403 Forbidden
Content-Type: application/json

{"error": "You do not have access to this project"}
404Not Foundデフォルトでキャッシュ可能

サーバーにはその URL に対応する現在の表現がないか、存在するかどうかを明かしません。

使う場面

不明な URL、削除を追跡していない場合の削除済みレコード、権限のないユーザーからリソースを隠す場合。

使わない場面

リソースが以前存在し、完全になくなった場合は、410 がそれを明示します。「見つかりません」と表示する 200 ページ(ソフト 404)を返さないでください。

キャッシュ

デフォルトでキャッシュ可能(ヒューリスティックにキャッシュ可能)

定義元

RFC 9110 §15.5.5

例
HTTP/1.1 404 Not Found
Content-Type: text/html
405Method Not Allowedデフォルトでキャッシュ可能

URL は存在しますが、この HTTP メソッドには対応していません。

使う場面

読み取り専用リソースへの DELETE や、GET 専用ページへの POST。レスポンスには、対応メソッドを列挙した Allow ヘッダーを含める必要があります。

使わない場面

権限の問題(403)や、サーバーがまったく実装していないメソッド(501)には使わないでください。

キャッシュ

デフォルトでキャッシュ可能(ヒューリスティックにキャッシュ可能)

定義元

RFC 9110 §15.5.6

例
HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD
406Not Acceptable

サーバーは、リクエストの Accept、Accept-Language、Accept-Encoding ヘッダーに合うレスポンスを生成できません。

使う場面

JSON しか扱わない API が、代替手段なしで「Accept: application/xml」を受け取った場合。

使わない場面

ほとんどのサーバーは一致しない Accept ヘッダーを無視してデフォルトの形式を返します。そのほうが通常は親切です。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 9110 §15.5.7

例
HTTP/1.1 406 Not Acceptable
Content-Type: application/json

{"supported": ["application/json"]}
407Proxy Authentication Required

401 と同様ですが、クライアントは間にあるプロキシで認証する必要があります。

使う場面

フォワードプロキシ(企業のプロキシなど)が Proxy-Authenticate ヘッダーとともに送信します。

使わない場面

オリジンサーバーが送信することはありません。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 9110 §15.5.8

例
HTTP/1.1 407 Proxy Authentication Required
Proxy-Authenticate: Basic realm="corp-proxy"
408Request Timeout

サーバーが待機できる時間内に完全なリクエストを受け取れなかったため、接続を閉じようとしています。

使う場面

アイドル状態のキープアライブ接続や遅いアップロードに対してサーバーが送信します。クライアントは新しい接続でリクエストを再試行できます。

使わない場面

バックエンドの処理が遅い場合には使いません。それはゲートウェイでの 504 か、単に遅いレスポンスです。このコードと一緒に「Connection: close」を送ってください。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 9110 §15.5.9

例
HTTP/1.1 408 Request Timeout
Connection: close
409Conflict

リクエストがリソースの現在の状態と競合しています。

使う場面

すでに存在するメールアドレスでのユーザー作成、他の人が変更したレコードの編集(バージョンの不一致)、空でないフォルダの削除。

使わない場面

If-Match / If-Unmodified-Since の条件が満たされない場合は 412 を、バリデーションエラーには 400 または 422 を使います。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 9110 §15.5.10

例
HTTP/1.1 409 Conflict
Content-Type: application/json

{"error": "Email already registered"}
410Goneデフォルトでキャッシュ可能

リソースは以前ここに存在しましたが、恒久的に削除され、転送先もありません。

使う場面

販売終了した商品、終了したキャンペーン、削除されたアカウント、廃止された API バージョン。Google は 404 と 410 をほぼ同じように扱いますが、410 のほうが少し早くインデックスから削除されることがあります。

使わない場面

コンテンツが移動した場合は、代わりに 301 でリダイレクトします。恒久的かどうか確信がない場合は 404 を使います。

キャッシュ

デフォルトでキャッシュ可能(ヒューリスティックにキャッシュ可能)

定義元

RFC 9110 §15.5.11

例
HTTP/1.1 410 Gone
411Length Required

サーバーは、このリクエストに Content-Length ヘッダーを要求しています。

使う場面

チャンク形式のアップロードを拒否し、事前にボディのサイズを知る必要があるサーバー。

使わない場面

アプリケーションで必要になることはまれで、通常は Web サーバー自体が返します。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 9110 §15.5.12

例
HTTP/1.1 411 Length Required
412Precondition Failed

リクエストヘッダーの条件(If-Match、If-Unmodified-Since、書き込み時の If-None-Match)が偽と評価されました。

使う場面

楽観的並行性制御:クライアントが古い ETag を付けて If-Match を送った場合で、他の誰かが先にリソースを変更したことを意味します。

使わない場面

条件付きヘッダーとは関係のないビジネスルール違反には使わないでください(409 または 422 を使います)。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 9110 §15.5.13

例
PUT /docs/7 HTTP/1.1
If-Match: "v3"

HTTP/1.1 412 Precondition Failed
ETag: "v4"
413Content Too Large

リクエストボディが、サーバーが処理できる大きさを超えています。RFC 9110 より前は「Payload Too Large」と呼ばれていました。

使う場面

上限を超えるアップロード(nginx の client_max_body_size、API の 10 MB 上限など)。上限が一時的なものなら Retry-After を追加します。

使わない場面

URL が長すぎる場合は 414、ヘッダーが大きすぎる場合は 431 を使います。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 9110 §15.5.14

例
HTTP/1.1 413 Content Too Large
Connection: close
414URI Too Longデフォルトでキャッシュ可能

リクエスト対象(URL)が、サーバーが解釈できる長さを超えています。

使う場面

巨大なクエリ文字列。POST にすべき GET フォームや、パラメーターを追加し続けるリダイレクトループが原因であることがよくあります。

使わない場面

上限をどこまでも引き上げるのではなく、大きな入力はリクエストボディ(POST)に移しましょう。

キャッシュ

デフォルトでキャッシュ可能(ヒューリスティックにキャッシュ可能)

定義元

RFC 9110 §15.5.15

例
HTTP/1.1 414 URI Too Long
415Unsupported Media Type

ボディの形式(Content-Type または Content-Encoding)に対応していないため、サーバーはリクエストを拒否しています。

使う場面

JSON を受け付けるエンドポイントがフォームデータや XML を受け取った場合や、Content-Type ヘッダーがない場合。Accept-Post または Accept-Patch を含めて、対応形式を示しましょう。

使わない場面

形式は正しいが内容が不正なボディには使いません(400 または 422)。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 9110 §15.5.16

例
HTTP/1.1 415 Unsupported Media Type
Accept-Post: application/json
416Range Not Satisfiable

Range ヘッダーのバイト範囲がリソースとまったく重なりません。たとえばファイルの終端を超えるバイトを要求した場合です。

使う場面

ファイルが小さくなった後の再開ダウンロードや、クライアントが終端を超えて要求した場合。Content-Range: bytes */<length> を含めます。

使わない場面

サーバーは不正な Range を単に無視して、ボディ全体とともに 200 を返すこともでき、それも認められています。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 9110 §15.5.17

例
HTTP/1.1 416 Range Not Satisfiable
Content-Range: bytes */47022
417Expectation Failed

サーバーは、リクエストの Expect ヘッダーの要件を満たせません。

使う場面

クライアントが「Expect: 100-continue」に対応していないサーバーやプロキシに送った場合や、未知の期待値を送った場合。

使わない場面

このコードを受け取ったクライアントは、Expect ヘッダーなしで再試行すべきです。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 9110 §15.5.18

例
HTTP/1.1 417 Expectation Failed
418(Unused)

418 が「I’m a teapot」というジョークコードとして広く使われていたため、RFC 9110 で予約されています。HTTP での意味は定められていません。

予約済み。1998 年のエイプリルフール RFC 2324(HTCPCP)の「I’m a teapot」として有名です。

使う場面

イースターエッグとしてのみ。一部のサービスは、拒否したいリクエストにユーモラスに応答するために使います。

使わない場面

実際のエラーには使わないでください。意味を割り当てることができず、クライアントはどう対処すべきかわかりません。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 9110 §15.5.19

例
HTTP/1.1 418 I'm a teapot
419Page Expired非公式 · Laravel

CSRF トークンがない、または期限切れのときに Laravel が返します。通常は、フォームのあるページでセッションがタイムアウトした後に発生します。

使う場面

Laravel の CSRF ミドルウェアが送信します。ページを再読み込みする、フォームに @csrf を含める、AJAX リクエストで X-CSRF-TOKEN ヘッダーを送る、のいずれかで解決します。

使わない場面

標準のコードではありません。Laravel 以外の API から送らないでください。

キャッシュ

該当なし

定義元

Laravel(IANA レジストリには未登録)

例
HTTP/1.1 419 unknown status
420Enhance Your Calm非公式 · Twitter(旧)

旧 Twitter API のレート制限レスポンスで、現在は標準の 429 に置き換えられています。

使う場面

新規の用途はありません。古いクライアントライブラリで見かけることがあります。Spring はかつて 420「Method Failure」を定義していましたが、現在は非推奨です。

使わない場面

レート制限には 429 を使います。

キャッシュ

該当なし

定義元

Twitter API v1(IANA レジストリには未登録)

例
HTTP/1.1 420 Enhance Your Calm
421Misdirected Request

リクエストが、そのホストとスキームに対するレスポンスを生成できないサーバーに届きました。

使う場面

HTTP/2 の接続の統合がうまくいかなかった場合:ブラウザが同じ証明書でカバーされる別のホスト名に接続を再利用したものの、サーバーがそのホストを提供していない場合です。クライアントは新しい接続で再試行すべきです。

使わない場面

単一サーバー上の通常の未知のホスト名には使いません。その場合は通常 404 か、デフォルトのバーチャルホストになります。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 9110 §15.5.20

例
HTTP/2 421
422Unprocessable Content

リクエストは正しい形式で対応形式でもありますが、内容がバリデーションに通りません。RFC 4918 では「Unprocessable Entity」と呼ばれていました。

使う場面

フォームや API のバリデーションエラー:メールアドレスになっていないメール、開始日より前の終了日など。Rails、Laravel、FastAPI はデフォルトでこれを使います。

使わない場面

構文の誤り(解析できない JSON)には 400 を使います。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 9110 §15.5.21

例
HTTP/1.1 422 Unprocessable Content
Content-Type: application/json

{"errors": {"email": ["is invalid"]}}
423Locked

リソースがロックされているため、リクエストで変更できません。

WebDAV

使う場面

WebDAV の LOCK のセマンティクス。一部の API は、他の人が編集中のレコードや、ログイン失敗でロックされたアカウントに使います。

使わない場面

WebDAV 以外では、汎用クライアントには 409 のほうが理解されやすいです。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 4918 §11.3

例
HTTP/1.1 423 Locked
424Failed Dependency

依存していた別の操作が失敗したため、この操作も失敗しました。

WebDAV

使う場面

WebDAV の PROPPATCH やバッチリクエストで、先の項目が失敗したために試行されなかった項目。

使わない場面

上流サービスの障害には使いません。それらは 502 または 503 です。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 4918 §11.4

例
HTTP/1.1 424 Failed Dependency
425Too Early

TLS 1.3 のアーリーデータ(0-RTT)で送られたリクエストは、リプレイされる可能性があるため、サーバーは処理しません。

使う場面

0-RTT を受け付けるものの、アーリーデータ内の非冪等なリクエスト(POST)を拒否する CDN やサーバー。クライアントはハンドシェイク完了後に再試行します。

使わない場面

一般的な「後で再試行」のコードではありません。その場合は Retry-After 付きの 503 を使います。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 8470 §5.2

例
HTTP/1.1 425 Too Early
426Upgrade Required

サーバーは現在のプロトコルでのリクエストを拒否していますが、Upgrade ヘッダーで指定したプロトコルにアップグレードすれば受け付けます。

使う場面

TLS や新しいプロトコルを必須とする場合や、WebSocket エンドポイントに通常の HTTP リクエストが来た場合。Upgrade ヘッダーを含める必要があります。

使わない場面

Web サイトの HTTP から HTTPS への移行には、301 または 308 のリダイレクトと HSTS を組み合わせるのが一般的です。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 9110 §15.5.22

例
HTTP/1.1 426 Upgrade Required
Upgrade: TLS/1.3, HTTP/1.1
Connection: Upgrade
428Precondition Required

更新の消失を防ぐため、サーバーはリクエストが条件付き(If-Match など)であることを要求しています。

使う場面

PUT、PATCH、DELETE の前に、最後に確認した ETag を If-Match で送るようクライアントに求める API。

使わない場面

前提条件が送られて失敗した場合は 412 を使います。428 は何も送られなかった場合のためのものです。

キャッシュ

キャッシュに保存してはならない

定義元

RFC 6585 §3

例
HTTP/1.1 428 Precondition Required
Content-Type: application/json

{"error": "Send If-Match with the current ETag"}
429Too Many Requests

クライアントが一定時間内に送ったリクエストが多すぎます(レート制限)。

使う場面

API のレート制限、ログイン試行の制限、スクレイピング対策。行儀のよいクライアントがいつ再試行すればよいかわかるよう Retry-After を含めましょう。RateLimit ヘッダーも役立ちます。

使わない場面

サーバーが全員に対して過負荷になっている場合は 503 を使います。Googlebot は 429 を 503 と同様に扱い、クロールの速度を落とします。

キャッシュ

キャッシュに保存してはならない

定義元

RFC 6585 §4

例
HTTP/1.1 429 Too Many Requests
Retry-After: 60
Content-Type: application/json

{"error": "Rate limit exceeded: 100 requests per minute"}
431Request Header Fields Too Large

ヘッダーが、個別に、または合計で、サーバーにとって大きすぎます。

使う場面

たいていは、ドメインに蓄積した大きすぎる Cookie や巨大な Authorization トークンが原因です。ユーザー側では Cookie を削除すると解決することがよくあります。

使わない場面

URL が長い場合は 414、ボディが大きい場合は 413 を使います。

キャッシュ

キャッシュに保存してはならない

定義元

RFC 6585 §5

例
HTTP/1.1 431 Request Header Fields Too Large
440Login Time-out非公式 · Microsoft IIS / Exchange

クライアントのセッションが期限切れになり、再ログインが必要です(Outlook Web Access など IIS のアプリ)。

使う場面

Exchange/OWA 環境で見られます。

使わない場面

自分のアプリでのセッション切れには 401 を使います。

キャッシュ

該当なし

定義元

Microsoft IIS(IANA レジストリには未登録)

例
HTTP/1.1 440 Login Time-out
444No Response非公式 · nginx

nginx 内部のコード:「return 444;」で、レスポンスを一切送らずに接続を閉じます。

使う場面

スキャナーからのリクエスト、デフォルトの server ブロックでの未知の Host ヘッダーへのリクエスト、悪質なクライアントの遮断。nginx のログに記録され、クライアントには空の応答が返ります。

使わない場面

クライアントが 444 を受け取ることはないので、クライアントコードで処理するものではありません。

キャッシュ

該当なし

定義元

nginx(IANA レジストリには未登録)

例
server {
  listen 80 default_server;
  return 444;
}
449Retry With非公式 · Microsoft

Microsoft の拡張:クライアントが特定の操作を行った後にリクエストを再試行すべきことを示します。

使う場面

一部の Microsoft サービスで見られます(Exchange ActiveSync。Azure Cosmos DB は再試行可能な書き込み競合に 449 を使います)。

使わない場面

標準ではありません。自分の API では 409、または Retry-After 付きの 503 を使います。

キャッシュ

該当なし

定義元

Microsoft IIS(IANA レジストリには未登録)

例
HTTP/1.1 449 Retry With
450Blocked by Windows Parental Controls非公式 · Microsoft

Windows の保護者による制限でページへのアクセスがブロックされました。

使う場面

保護者による制限が有効な Windows システムで生成されます。

使わない場面

サーバーから送信しないでください。

キャッシュ

該当なし

定義元

Microsoft(IANA レジストリには未登録)

例
HTTP/1.1 450 Blocked by Windows Parental Controls
451Unavailable For Legal Reasonsデフォルトでキャッシュ可能

法的な要請(裁判所の命令、政府による検閲、法的理由による地域制限)のため、アクセスが拒否されています。

使う場面

特定の法域でブロックされたコンテンツ(制裁、GDPR 関連の地域ブロック、削除命令)。rel="blocked-by" 付きの Link ヘッダーで、誰がブロックを課したかを示せます。

使わない場面

通常の権限拒否(403)や、単に自分で削除すると決めたコンテンツ(410)には使いません。

キャッシュ

デフォルトでキャッシュ可能(ヒューリスティックにキャッシュ可能)

定義元

RFC 7725 §3

例
HTTP/1.1 451 Unavailable For Legal Reasons
Link: <https://authority.example/>; rel="blocked-by"
460Client closed connection (AWS ELB)非公式 · AWS Application Load Balancer

アイドルタイムアウトが経過する前にクライアントが接続を閉じた場合に、AWS ALB が記録します。

使う場面

ALB のアクセスログで見られます。たいていは、ターゲットの処理時間よりタイムアウトが短いクライアントです。

使わない場面

クライアントには送信されません。

キャッシュ

該当なし

定義元

AWS Elastic Load Balancing(IANA レジストリには未登録)

例
elb_status_code=460
463Too many IPs in X-Forwarded-For (AWS ELB)非公式 · AWS Application Load Balancer

ALB が 30 個を超える IP アドレスを含む X-Forwarded-For ヘッダーを受け取りました。

使う場面

たいていは、アドレスを追加し続けるプロキシのループです。

使わない場面

アプリケーションで使うものではありません。

キャッシュ

該当なし

定義元

AWS Elastic Load Balancing(IANA レジストリには未登録)

例
HTTP/1.1 463
494Request Header Too Large非公式 · nginx

ヘッダーが large_client_header_buffers を超えた場合の nginx 内部のコードです。クライアントには 400 が返ります。

使う場面

nginx のログや error_page の設定で使われます。

使わない場面

標準のコードは 431 です。

キャッシュ

該当なし

定義元

nginx(IANA レジストリには未登録)

例
error_page 494 /header-too-large.html;
495SSL Certificate Error非公式 · nginx

nginx 内部:クライアントが無効なクライアント証明書を提示しました(相互 TLS)。クライアントには 400 として送られます。

使う場面

mTLS の失敗時のカスタムエラーページ。

使わない場面

実際に送受信されるステータスコードではありません。

キャッシュ

該当なし

定義元

nginx(IANA レジストリには未登録)

例
error_page 495 /bad-client-cert.html;
496SSL Certificate Required非公式 · nginx

nginx 内部:クライアント証明書が必要なのに提示されませんでした。クライアントには 400 として送られます。

使う場面

ssl_verify_client が有効な場合のカスタムエラーページ。

使わない場面

実際に送受信されるステータスコードではありません。

キャッシュ

該当なし

定義元

nginx(IANA レジストリには未登録)

例
error_page 496 /client-cert-required.html;
497HTTP Request Sent to HTTPS Port非公式 · nginx

nginx 内部:TLS を想定したポートに通常の HTTP リクエストが届きました。クライアントには 400 として送られます。

使う場面

よく使われる手法は「error_page 497 =301 https://$host$request_uri;」で、こうしたリクエストを HTTPS にリダイレクトします。

使わない場面

実際に送受信されるステータスコードではありません。

キャッシュ

該当なし

定義元

nginx(IANA レジストリには未登録)

例
error_page 497 =301 https://$host:$server_port$request_uri;
498Invalid Token非公式 · Esri ArcGIS Server

期限切れ、またはその他の理由で無効なトークンに対して ArcGIS が返します。

使う場面

ArcGIS のサービスを呼び出す場合にのみ関係します。

使わない場面

自分の API での無効なトークンには 401 を使います。

キャッシュ

該当なし

定義元

Esri ArcGIS(IANA レジストリには未登録)

例
HTTP/1.1 498 Invalid Token
499Client Closed Request非公式 · nginx

nginx がレスポンスを送る前にクライアントが接続を閉じた場合に、nginx が 499 を記録します。

使う場面

アクセスログで見られます:ユーザーがページを離れた、モバイルクライアントがタイムアウトした、nginx の前にあるロードバランサーのタイムアウトが短いなど。特定のエンドポイントで 499 が多い場合、たいていは処理が遅すぎることを意味します。

使わない場面

クライアントが受け取ることはありません。Esri も 499 を「Token Required」に使っています。

キャッシュ

該当なし

定義元

nginx(IANA レジストリには未登録)

例
203.0.113.9 - - [16/Oct/2026:10:12:01 +0000] "GET /report HTTP/1.1" 499 0

5xx サーバーエラー

500Internal Server Error

サーバーで予期しない状況が発生し、リクエストを処理できませんでした。

使う場面

未処理の例外やバグ。より具体的な 5xx が当てはまらない場合の汎用的なフォールバックです。

使わない場面

クライアントの誤り(4xx)には使わないでください。本番環境ではボディにスタックトレースを含めず、ログに記録しましょう。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 9110 §15.6.1

例
HTTP/1.1 500 Internal Server Error
Content-Type: application/problem+json

{"title": "Internal Server Error", "traceId": "4bf92f35"}
501Not Implementedデフォルトでキャッシュ可能

サーバーは必要な機能に対応していません。典型的には、まったく認識しない HTTP メソッドです。

使う場面

未知のメソッドによるリクエスト(通常の Web サーバーへの WebDAV メソッドなど)や、サーバーが意図的にまだ実装していない機能。

使わない場面

メソッドは認識しているが、その URL では許可されていない場合は 405 を使います。

キャッシュ

デフォルトでキャッシュ可能(ヒューリスティックにキャッシュ可能)

定義元

RFC 9110 §15.6.2

例
HTTP/1.1 501 Not Implemented
502Bad Gateway

ゲートウェイまたはプロキシが、上流サーバーから不正なレスポンスを受け取りました。

使う場面

アプリケーションサーバーがクラッシュした、接続を閉じた、不正なデータを返したときに、リバースプロキシやロードバランサー(nginx、Cloudflare、AWS ALB)が送信します。

使わない場面

アプリケーションコードから送る必要はほとんどありません。例外は、呼び出した別のサービスが失敗した API ゲートウェイです。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 9110 §15.6.3

例
HTTP/1.1 502 Bad Gateway
Server: nginx
503Service Unavailable

サーバーは現在リクエストを処理できません(過負荷またはメンテナンス中)。一時的な状態であることが想定されています。

使う場面

計画メンテナンス、負荷の抑制、依存サービスの障害。Retry-After を追加しましょう。短期間の 503 なら、検索エンジンはページをインデックスに残します(200 のメンテナンスページや 404 とは異なります)。

使わない場面

サイトを何日も 503 のままにしないでください。返し続ける URL は、Google が最終的にインデックスから削除します。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 9110 §15.6.4

例
HTTP/1.1 503 Service Unavailable
Retry-After: 3600
504Gateway Timeout

ゲートウェイまたはプロキシが、上流サーバーから時間内にレスポンスを受け取れませんでした。

使う場面

アプリケーションの処理がプロキシのタイムアウトより長くかかったときに、プロキシやロードバランサーが送信します(nginx の proxy_read_timeout のデフォルトは 60 秒)。

使わない場面

時間のかかるジョブでは、単にタイムアウトを延ばすのではなく、202 を返して非同期で処理しましょう。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 9110 §15.6.5

例
HTTP/1.1 504 Gateway Timeout
Server: awselb/2.0
505HTTP Version Not Supported

サーバーは、リクエストで使われた HTTP のメジャーバージョンに対応していません。

使う場面

サーバーが扱えないプロトコルバージョンを受け取った場合。

使わない場面

ほとんど見かけません。クライアントは試行錯誤ではなく、ALPN と Alt-Svc で HTTP/2 や HTTP/3 をネゴシエートします。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 9110 §15.6.6

例
HTTP/1.1 505 HTTP Version Not Supported
506Variant Also Negotiates

サーバーの設定エラー:選ばれたバリアント自体がネゴシエーションを行うよう設定されており、ループが発生しています。

透過的コンテンツネゴシエーション(実験的)

使う場面

RFC 2295 の透過的コンテンツネゴシエーションを実装したサーバーのみ。

使わない場面

アプリケーションのエラーには使いません。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 2295 §8.1

例
HTTP/1.1 506 Variant Also Negotiates
507Insufficient Storage

サーバーは、リクエストの完了に必要なデータを保存できません。

WebDAV

使う場面

ディスクやユーザーの容量が一杯になったときの WebDAV やファイルストレージ API。

使わない場面

1 回のアップロードがサイズ上限を超える場合は、413 のほうが明確です。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 4918 §11.5

例
HTTP/1.1 507 Insufficient Storage
508Loop Detected

無限ループ(Depth: infinity の WebDAV バインディング)を検出したため、サーバーが操作を停止しました。

WebDAV

使う場面

WebDAV サーバー。CloudLinux ベースの共有ホスティングでも、アカウントが上限に達したときに 508「Resource Limit Is Reached」を送りますが、これは非標準です。

使わない場面

リダイレクトループには使いません。それはブラウザ自身が報告するクライアント側のエラーです。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 5842 §7.2

例
HTTP/1.1 508 Loop Detected
509Bandwidth Limit Exceeded非公式 · Apache bw_mod / cPanel

ホスティングアカウントが帯域幅の割り当てを超えました。

使う場面

共有ホスティングのコントロールパネル。

使わない場面

自分のシステムでは 503 または 429 を使います。

キャッシュ

該当なし

定義元

Apache / cPanel(IANA レジストリには未登録)

例
HTTP/1.1 509 Bandwidth Limit Exceeded
510Not Extended非推奨

リクエストが、HTTP 拡張フレームワークにおけるリソースへのアクセスポリシーを満たしていません。

IANA レジストリで廃止扱い:RFC 2774 は Historic に移されました。

使う場面

現在の用途はありません。拡張フレームワークは広く実装されることはありませんでした。

使わない場面

送信しないでください。

キャッシュ

明示的な Cache-Control または Expires がある場合のみキャッシュ可能

定義元

RFC 2774 §7

例
HTTP/1.1 510 Not Extended
511Network Authentication Required

ネットワークにアクセスするには、クライアントの認証が必要です(キャプティブポータル)。

使う場面

ホテル、空港、カフェの Wi-Fi ポータルが、ユーザーがログインするか利用規約に同意するまで通信を横取りする場合。

使わない場面

オリジンサーバーが送信してはいけません。通信を横取りするネットワークプロキシ専用です。

キャッシュ

キャッシュに保存してはならない

定義元

RFC 6585 §6

例
HTTP/1.1 511 Network Authentication Required
Content-Type: text/html

<meta http-equiv="refresh" content="0; url=https://login.example.net/">
520Web Server Returned an Unknown Error非公式 · Cloudflare

オリジンが Cloudflare に空、不明、または予期しないレスポンスを返しました。

使う場面

オリジンのログを確認してください:クラッシュ、接続のリセット、Cloudflare の上限を超えるヘッダー、空の応答など。

使わない場面

Cloudflare のみが送信します。

キャッシュ

該当なし

定義元

Cloudflare(IANA レジストリには未登録)

例
HTTP/2 520
server: cloudflare
521Web Server Is Down非公式 · Cloudflare

Cloudflare がオリジンに接続できませんでした:接続が拒否されました。

使う場面

オリジンの Web サーバーが停止しているか、ファイアウォールが Cloudflare の IP 範囲をブロックしています。

使わない場面

Cloudflare のみが送信します。

キャッシュ

該当なし

定義元

Cloudflare(IANA レジストリには未登録)

例
HTTP/2 521
server: cloudflare
522Connection Timed Out非公式 · Cloudflare

Cloudflare がオリジンとの TCP 接続の確立中にタイムアウトしました。

使う場面

オリジンの過負荷、ファイアウォールによるパケットの破棄、DNS のオリジン IP の誤り。

使わない場面

Cloudflare のみが送信します。

キャッシュ

該当なし

定義元

Cloudflare(IANA レジストリには未登録)

例
HTTP/2 522
server: cloudflare
523Origin Is Unreachable非公式 · Cloudflare

Cloudflare がオリジンにまったく到達できません。典型的にはルーティングの問題か DNS レコードの誤りです。

使う場面

DNS の A/AAAA レコードが、到達可能な正しい IP を指しているか確認してください。

使わない場面

Cloudflare のみが送信します。

キャッシュ

該当なし

定義元

Cloudflare(IANA レジストリには未登録)

例
HTTP/2 523
server: cloudflare
524A Timeout Occurred非公式 · Cloudflare

Cloudflare はオリジンに接続しましたが、オリジンがタイムアウト(デフォルトは 100 秒)内に HTTP レスポンスを返しませんでした。

使う場面

時間のかかるリクエスト:処理をバックグラウンドジョブに移してポーリングするか、進行状況をストリーミングしましょう。

使わない場面

Cloudflare のみが送信します。

キャッシュ

該当なし

定義元

Cloudflare(IANA レジストリには未登録)

例
HTTP/2 524
server: cloudflare
525SSL Handshake Failed非公式 · Cloudflare

Cloudflare とオリジンの間の TLS ハンドシェイクが失敗しました。

使う場面

SSL モードが Full または Full (strict) のときに、オリジンが 443 で待ち受けていない、証明書がない、共通の暗号スイートがない、SNI が設定されていないなど。

使わない場面

Cloudflare のみが送信します。

キャッシュ

該当なし

定義元

Cloudflare(IANA レジストリには未登録)

例
HTTP/2 525
server: cloudflare
526Invalid SSL Certificate非公式 · Cloudflare

Full (strict) モードで、Cloudflare がオリジンの証明書を検証できませんでした(期限切れ、自己署名、ホスト名の不一致)。

使う場面

オリジンに有効な証明書か、Cloudflare Origin CA 証明書をインストールしてください。

使わない場面

Cloudflare のみが送信します。

キャッシュ

該当なし

定義元

Cloudflare(IANA レジストリには未登録)

例
HTTP/2 526
server: cloudflare
527Railgun Error非公式 · Cloudflare(廃止)非推奨

Cloudflare とオリジンの Railgun リスナーとの間の接続の問題です。Cloudflare は Railgun の提供を終了しています。

使う場面

過去のものです。

使わない場面

送信していたのは Cloudflare のみです。

キャッシュ

該当なし

定義元

Cloudflare(IANA レジストリには未登録)

例
HTTP/1.1 527 Railgun Error
530Origin DNS / 1xxx error非公式 · Cloudflare

Cloudflare の 1xxx エラーページ(1016 Origin DNS error など)とともに返されます。ページに表示される 1xxx のコードが本当の原因です。

使う場面

ページに表示された 1xxx のエラー番号を調べてください。

使わない場面

CDN やホスティング事業者のみが送信します。

キャッシュ

該当なし

定義元

Cloudflare(IANA レジストリには未登録)

例
HTTP/2 530
server: cloudflare
561Unauthorized (AWS ELB)非公式 · AWS Application Load Balancer

ALB の組み込み認証(OIDC または Cognito)が ID プロバイダーとの間で失敗しました。

使う場面

ALB リスナールールの IdP の設定を確認してください。

使わない場面

アプリケーションで使うものではありません。

キャッシュ

該当なし

定義元

AWS Elastic Load Balancing(IANA レジストリには未登録)

例
HTTP/1.1 561
598Network Read Timeout Error非公式 · 一部の HTTP プロキシ

一部のプロキシが、プロキシの背後での読み取りタイムアウトを示すために使います。

使う場面

まれ。特定のプロキシ製品で見かけることがあります。

使わない場面

504 を使います。

キャッシュ

該当なし

定義元

Informal convention(IANA レジストリには未登録)

例
HTTP/1.1 598
599Network Connect Timeout Error非公式 · 一部の HTTP プロキシとクライアント

一部のプロキシやクライアントライブラリ(Tornado の HTTP クライアントなど)が、接続タイムアウトに使います。

使う場面

まれ。

使わない場面

プロキシでは 504 を使います。

キャッシュ

該当なし

定義元

Informal convention(IANA レジストリには未登録)

例
HTTP/1.1 599

ブラウザ内で動作する静的なリファレンスです。検索内容がどこかに送信されることはありません。 すべての無料ツールを見る.

不具合や改善できそうな点を見つけましたか?いただいたメッセージはすべて読み、すぐに対応します。

この HTTP ステータスコード一覧は、100 Continue から 511 Network Authentication Required まで、IANA レジストリにあるすべてのコードを網羅し、意味、使うべき場面と使うべきでない場面、キャッシュが保存してよいか、定義元の RFC セクションを掲載しています。番号、4xx のようなクラス、「redirect」や「rate limit」のような単語を入力して絞り込めるほか、#404 や #503 のようなアンカーで任意のコードに直接リンクできます。

公式の項目は RFC 9110(2022 年)に従っています。RFC 9110 は RFC 7231 に代わるもので、いくつかのコードの名称が変わりました。413 は Content Too Large に、422 は Unprocessable Content になっています。nginx の 499 や Cloudflare の 522 のように、ログでは見かけてもレジストリにはないコードも、送信するシステム名とともに非公式と明記して掲載しています。これはリファレンスであってモニターではありません。URL を取得したり、稼働中のサイトがどのステータスを返すかを確認したりはしません。

使い方

  1. 検索ボックスにコード(503)、クラス(4xx)、キーワード(timeout、redirect、cache)を入力します。入力に合わせて結果が絞り込まれます。
  2. クラスのボタンで 1xx、2xx、3xx、4xx、5xx のコードだけを表示し、「非公式のコードを含める」のチェックを外すとベンダー固有のコードを非表示にできます。
  3. コードをクリックすると展開されます。意味、使うべき場面と使うべきでない場面、キャッシュの挙動、定義元の RFC、レスポンスの例が表示されます。
  4. 「このコードへのリンクをコピー」で、/tools/http-status-codes#429 のような直接リンクを共有できます。

よくある質問

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

401 Unauthorized は、リクエストに有効な認証情報がないことを意味します。クライアントがログインしていないか、トークンの期限が切れています。サーバーは認証方法を示す WWW-Authenticate ヘッダーを送る必要があります。403 Forbidden は、サーバーがクライアントが誰かを把握している(あるいはその必要がない)うえで、それでも拒否していることを意味し、ログインし直しても解決しません。要するに、401 は「あなたは誰?」、403 は「わかっているけど、ダメ」です。

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

どちらも恒久的なリダイレクトで、どちらも Google でランキングシグナルを引き継ぎます。違いはメソッドです。301 に従うとき、ブラウザは POST を GET に変えることがありますが、308 ではクライアントが同じメソッドと本文で繰り返す必要があります。通常のページ移転なら 301 で問題ありませんが、POST や PUT を受け付ける API エンドポイントには 308 を使ってください。一時的なリダイレクトにも同じ組み合わせがあり、302 はメソッドを変えてもよく、307 は変えてはいけません。

nginx のログにある 499 はどういう意味ですか?

499 Client Closed Request は nginx 独自のコードです。nginx がレスポンスを送る前にクライアントが接続を閉じたときに記録されるので、クライアントが実際に 499 を受け取ることはありません。たまに出る 499 はユーザーがページを離れただけですが、1 つのエンドポイントで多発している場合は、たいていそのエンドポイントが遅すぎて、クライアントや上流のロードバランサーが先にタイムアウトしています。

502、503、504 の違いは何ですか?

3 つとも、別のサーバーの前段にあるサーバーから返されます。502 Bad Gateway は、プロキシが上流のアプリから不正なレスポンスを受け取ったか、接続が切れたことを意味します。503 Service Unavailable は、サーバーが一時的にリクエストを処理できない状態で、通常は過負荷かメンテナンスが原因です。Retry-After を含めるべきです。504 Gateway Timeout は、プロキシが上流の応答を待ちきれずにあきらめたことを意味します。

418 I'm a teapot は本当にあるステータスコードですか?

RFC 2324(1998 年)のエイプリルフールのジョークとして始まりましたが、実装したソフトウェアが多かったため、現在 RFC 9110 では 418 を「(Unused)」として掲載しています。本当の意味が与えられることのないよう予約されているのです。実際の問題に対して送るべきエラーではありませんが、イースターエッグとして残しておくのは問題ありません。

デフォルトでキャッシュできるステータスコードは?

RFC 9110 は 200、203、204、206、300、301、308、404、405、410、414、501 をヒューリスティックにキャッシュ可能としています。つまり、Cache-Control や Expires がなくてもキャッシュが保存してよいということです。RFC 7725 で 451 が追加されています。302 や 307 を含むほかのコードは、レスポンスに明示的な鮮度情報がある場合にのみキャッシュされ、RFC 6585 は 428、429、431、511 を一切保存してはならないとしています。

5 つのクラスの概要

• 1xx 情報:最終的なレスポンスの前に返される中間レスポンス。直接扱うことはまれで、実務で重要なのは 101(WebSocket へのアップグレード)と 103(Early Hints)です。

• 2xx 成功:リクエストは成功しました。通常のレスポンスには 200、何かが作成されたときは 201(Location ヘッダー付き)、意図的に本文がないときは 204。

• 3xx リダイレクト:クライアントは別の場所を参照する必要があります。恒久的な移転には 301/308、一時的な移転には 302/307、フォームの POST の後には 303、キャッシュされたコピーがまだ有効なときは 304。

• 4xx クライアントエラー:リクエストが誤っており、そのまま繰り返しても再び失敗します。400 は不正な形式、401 は未認証、403 は許可なし、404 は見つからない、409 は競合、422 は検証失敗、429 はレート制限。

• 5xx サーバーエラー:リクエストは正しくても、サーバーが失敗しました。500 はバグ、502/504 はプロキシから上流への接続の失敗、503 は一時的な利用不可。

API で適切なコードを選ぶ

汎用的なクライアントが対処できる最も具体的なコードを返し、詳細は本文に入れましょう。リトライする HTTP クライアント、CDN、監視システムは JSON を読まなくても 429 や 503 の意味がわかりますが、{"error": true} 付きの 200 は解釈できません。RFC 9457(Problem Details)は、エラー本文の標準的な JSON の形を定めています。

ほとんどの JSON API で実用的な対応付けは次のとおりです。解析できない入力には 400、形式は正しいが検証に失敗した入力には 422、トークンがないか期限切れなら 401、ユーザーに権限がなければ 403、不明な ID には 404(ユーザーが見てはいけないリソースを隠す場合も)、重複やバージョンの競合には 409、If-Match の ETag が古ければ 412、レート制限には Retry-After 付きの 429、計画的なダウンタイムには Retry-After 付きの 503。

新しい番号を作らないでください。クライアントは未知のコードをそのクラスの x00 として扱う(未知の 4xx は 400 と同様に扱われる)ので、独自の 461 を使っても、400 とわかりやすいメッセージ以上のメリットはありません。

ステータスコードと SEO

検索エンジンはステータスコードを文字どおりに読みます。301 や 308 は古い URL のシグナルを新しい URL に引き継ぎ、302 や 307 は古い URL をインデックスに残すよう Google に伝えます。404 と 410 はどちらも時間とともにページをインデックスから削除します。「見つかりません」と表示する 200 のページはソフト 404 で、Google はこれを検出して Search Console で報告します。メンテナンス時は、Retry-After 付きの 503 を短期間返せば順位は保たれますが、200 の「まもなく再開します」ページは検索結果でコンテンツと置き換わってしまうことがあります。また、Googlebot は 429、500、503 を受け取るとクロール頻度を下げます。

関連する無料ツール

  • ユーザーエージェント解析 — 自分のユーザーエージェントとクライアントヒントを確認したり、任意の UA 文字列をブラウザ、エンジン、OS、デバイス、CPU に分解したりできます。CSV 対応の一括モード付き。
  • JSON 整形 — JSON を整形、圧縮(minify)、検証し、解析エラーは行と列で位置を示します。ブラウザ上で動作、アップロード不要。
  • docker run ⇄ Compose 変換 — docker run コマンドを docker-compose.yml のサービスに、Compose のサービスを docker run に変換します。
  • 正規表現テスター — サンプルテキストに対して正規表現をテストし、マッチのハイライト、キャプチャグループ、置換のプレビューをリアルタイムで確認。無料、ブラウザ上で動作。