HTTPステータスコード リファレンス
すべての公式HTTPステータスコードを検索できるリファレンスです — RFC 9110および関連RFCに基づき、各コードの意味とサーバーがそれを送信すべきタイミングを解説します。
203回閲覧
一致するステータスコードがありません。
ステータスコードが先頭の数字でグループ分けされている理由
すべてのHTTPステータスコードは3桁の数字であり、先頭の1桁だけで、クライアントは応答の残りを読む前にその大まかなカテゴリーを把握できます — これはHTTPの最も初期の仕様から組み込まれ、受け継がれてきた設計上の選択であり、今日ではRFC 9110で正式に定められています。RFC 9110は、より古いRFC 7230〜7235のシリーズを統合・置き換え、HTTPの意味論を特定のプロトコルバージョンに依存しない形で定義した文書です(HTTP/1.1、HTTP/2、HTTP/3はすべて同じステータスコードの意味を共有しています)。1xx(情報)は、リクエストが受信・理解され、処理が続行中であることを意味します — これらは暫定的な応答であり、クライアントは最終的なものとして扱うべきではありません。2xx(成功)は、リクエストが受信・理解され、受け入れられたことを意味します。3xx(リダイレクト)は、リクエストを完了するために(通常は別のURLを取得するなど)さらなる処理が必要であることを意味します。4xx(クライアントエラー)は、送信されたリクエスト自体に、構文の誤り、認証情報の欠如、存在しないリソースなど、クライアント側が原因の問題が含まれていることを意味します。5xx(サーバーエラー)は、リクエスト自体は一見有効だったものの、サーバーがそれを処理できなかったことを意味します。この先頭桁のシステムのおかげで、特定のコードについて「4」という数字しか認識できないクライアントであっても、まったく同じリクエストを再送するのではなく、自分自身のリクエストの何かを修正すべきだということを正しく理解できます — この「フォールバック動作」こそが、標準がこの仕組みを義務付けている理由そのものです。
2桁目と3桁目は、それぞれのクラスをさらに具体的で文書化された意味へと細分化します。クライアントは、特に認識していないコードに対しては、その大分類の一般的な振る舞いにフォールバックすることが期待されています — これが、226や508のような、あまり見かけない、あるいは比較的新しいコードであっても、明示的な対応がなくても古いソフトウェアがおおむね正しく扱える理由です。コードも自由に作られているわけではありません。「599」や「250」がサーバーによって異なる意味にならないよう、完全なレジストリはIANA(Internet Assigned Numbers Authority)によって管理されています — 実際に使用されているすべてのコードは、その正確な意味を定義する特定のRFCにさかのぼることができ、そのうちいくつかは特定のプロトコル向けに元のHTTP/1.1仕様を拡張したものです。最も分かりやすい例がWebDAV(RFC 4918)で、このページに載っている207、208、422、423、424、507/508の各コードはここに由来します。
正確に知っておく価値のある2つのコード: 404 と 410
最もよく混同される2つのコードが404 Not Foundと410 Goneであり、この違いは表面的なものではありません — 検索エンジンやブラウザの振る舞いを実際に変えます。404は意図的に曖昧です。サーバーは、そのURLにリソースが過去に存在したかどうか、戻ってくる可能性があるかどうか、あるいはURLが単に打ち間違えられただけなのかについて、何の情報も持っていません。410は意図的で、より強い主張です。リソースはまさにそのURLに存在していたが、意図的かつ恒久的に削除され、転送先もない、というものです — RFC 9110は、404では確実性を過小評価してしまうこの「状態が恒久的である可能性が高い」ケースに対して、明確に410を推奨しています。検索エンジンは実際にはこれを異なる方法で扱います。繰り返し404を返すURLは、戻ってくる可能性に備えて長期間にわたり何度か再クロールされた後にようやくインデックスから削除されるのが一般的ですが、410は意図的な削除を示すため、検索エンジンは一般的により早く反応し、サーバーが戻ってこないことを明示的に保証しているため、より早くページをインデックスから除外します。ページを恒久的に廃止する際に — 何でもかんでも404をデフォルトにするのではなく — 正しく410を使うことは、小さくとも実際に効果のある技術的SEOの手段です。
- 301 と 302、307、308 の違い: 301と308はどちらも「恒久的に移動した」ことを意味し、302と307はどちらも「一時的に移動した」ことを意味します — 新しい307/308のペアは、リダイレクト時にリクエストメソッドとボディが保持されることを保証するために特別に導入されました(POSTはPOSTのままになります)。従来広く見られたブラウザの挙動では、301/302のリダイレクトが暗黙のうちにGETへと変換されてしまい、フォームの再送信が壊れることがありましたが、新しいコードはこれを修正します。
- 401 と 403 の違い: 401 Unauthorizedは、その紛らわしい名前にもかかわらず、技術的には「あなたは認証されていません — ログインしてください」を意味します。403 Forbiddenは「あなたの身元は確認されていますが、これへのアクセスは許可されていません」を意味します。多くのAPIは実際にはこの区別を曖昧にしていますが、仕様上は明確に分けられています。
- 429 Too Many Requests(RFC 6585)は、標準的なレート制限の応答であり、クライアントに次に再試行するまでどれだけ待つべきかを正確に伝える
Retry-Afterヘッダーと組み合わせて使われることが一般的です。 - 1xxのコードが直接目に触れることはほとんどありません。ほとんどのHTTPクライアントライブラリは、アプリケーションコードが応答を目にする前に、これらを透過的に処理してしまうからです — たとえば100 Continueは、クライアントが大きなリクエストボディを送信する前に、そもそも送信する価値があるかどうかを確認できるようにするものです。
よくある質問
404と410の実際の違いは何ですか?
どちらもリソースが見つからないことを意味しますが、404はそれが過去に存在したかどうか、戻ってくる可能性があるかどうかを曖昧なままにします。一方410は、そのリソースがそのURLに存在しており、恒久的かつ意図的に削除されたという明確な主張です。サーバーが削除が恒久的であることを明示的に確認しているため、検索エンジンは一般的に410のページを404よりも速くインデックスから除外します。
418「私はティーポットです」は実在の、使用可能なステータスコードですか?
1998年のエイプリルフールジョークのRFCである「Hyper Text Coffee Pot Control Protocol」を定めたRFC 2324に由来します。真面目に意図されたものではありませんでしたが、他と紛れることのない明確なテスト用コードとして有用であることが判明し、RFC 9110は今日でも正式にこれを維持しており、そのステータスがオプションであること、実際のサーバーで実装されることは想定されていないことを明記しています。
301や302のリダイレクトが、フォームの送信を壊してしまうことがあるのはなぜですか?
歴史的に、多くのブラウザは301や302に従う際、リダイレクトされたPOSTリクエストを暗黙のうちにGETリクエストに変換し、送信されたボディを破棄していました。新しい307(Temporary Redirect)と308(Permanent Redirect)のコードは、リダイレクトを通じて元のHTTPメソッドとリクエストボディが保持されることを保証するために特別に導入されました。
401と403の違いは何ですか?
401 Unauthorizedは、実際にはクライアントがまったく認証されていないことを意味します — 名前とは裏腹に、これは認証情報を要求しているのです。403 Forbiddenは、クライアントの身元は確認されているが、その特定のリソースへのアクセスが明示的に許可されていないことを意味します。実際の多くのAPIはこれらを緩く、あるいは互換的に使っていますが、仕様上は意味が明確に区別されています。
507や423のようなWebDAV固有のコードはどこから来ているのですか?
これらはRFC 4918、すなわちWebDAV(Web Distributed Authoring and Versioning)仕様で定義されています。この仕様は、リソースのロック(423 Locked)やサーバーのストレージ不足の報告(507 Insufficient Storage)など、リモートファイル管理のための操作で通常のHTTPを拡張したものです。これらは、中核となるHTTPコードと並んで、公式のIANA HTTPステータスコードレジストリの一部であり続けています。
関連ツール
問題を報告
HTTPステータスコード リファレンス
コメント
まだコメントはありません — 最初のコメントを書いてみましょう!