リファレンス
HTTPステータスコード大全
「401と403の違いは?」「502と504はどっちが上流の問題?」—— HTTPステータスコードの意味・使いどころ・よくある原因を日本語で。 コード番号や名称で検索し、クラスで絞り込めます。
39 件
継続Continue
リクエストの前半(ヘッダ)は問題ないので本体の送信を続けてよい、という中間応答。
Expect: 100-continue を送った大きなPOSTで使われる。
プロトコル切替Switching Protocols
Upgradeヘッダの要求に応じてプロトコルを切り替える。
WebSocketのハンドシェイクで返る。
早期ヒントEarly Hints
本応答の前に、先読み(preload)すべきリソースのヒントを返す。表示の高速化に使う。
成功OK
最も一般的な成功。GETなら本体、POSTなら結果が返る。
作成完了Created
リクエストが成功し、新しいリソースが作成された。
作成先URLを Location ヘッダで返すのが作法。
受理(非同期)Accepted
要求は受け付けたが、処理はまだ完了していない。非同期・バッチ処理向き。
本文なしNo Content
成功したが返す本体がない。DELETE成功やフォーム保存後などに。
ボディを付けてはいけない。
部分取得Partial Content
Rangeリクエストに応じて、リソースの一部だけを返した。
動画のシークや再開ダウンロードの基盤。
恒久的に移動Moved Permanently
リソースは新しいURLへ恒久的に移った。
検索エンジンは評価を新URLへ引き継ぐ。ブラウザは強くキャッシュするので乱用注意。
一時的に移動Found
一時的な別URLへ。歴史的経緯で多くの実装がメソッドをGETに変える。
メソッドを保ちたいなら307を使う。
他を参照See Other
POSTの結果をGETで別URLから取得させる。二重送信を防ぐPRGパターンの要。
未更新Not Modified
条件付きリクエストの結果、リソースは変わっていないので本体を省略。
ETag/If-None-Match や Last-Modified/If-Modified-Since と対で使う。
一時的移動(メソッド維持)Temporary Redirect
302と違い、メソッドと本体をそのまま維持してリダイレクトする。
恒久的移動(メソッド維持)Permanent Redirect
301のメソッド維持版。POSTをPOSTのまま恒久リダイレクトしたい時に。
リクエスト不正Bad Request
構文やパラメータが不正でサーバーが理解できない。汎用のクライアントエラー。
未認証Unauthorized
認証が必要、または認証に失敗した。
名前に反して「認証(authn)」の話。WWW-Authenticateで方式を提示。認可の失敗は403。
権限なしForbidden
認証は済んでいても、その操作を行う権限がない。
401=誰かわからない、403=誰かはわかるが許さない。
未検出Not Found
リソースが存在しない。存在自体を隠したい時に403の代わりにも使う。
メソッド不許可Method Not Allowed
そのURLでは使えないメソッド(例: 読み取り専用にPOST)。
Allowヘッダで許可メソッド一覧を返すのが作法。
要求タイムアウトRequest Timeout
クライアントが時間内にリクエストを送りきらなかった。
競合Conflict
現在の状態と矛盾して処理できない。楽観ロックの衝突や重複作成など。
消滅Gone
かつて存在したが恒久的に無くなった。404と違い「もう無い」と明示できる。
事前条件不成立Precondition Failed
If-Match などの条件付きヘッダの条件が満たされなかった。
本文が大きすぎContent Too Large
リクエスト本体がサーバーの許容を超えた。アップロード上限など。
未対応メディア型Unsupported Media Type
Content-Typeがサーバーの対応外(例: JSON期待にXMLを送った)。
私はティーポットI'm a teapot
ティーポットにコーヒーを淹れさせようとした。エイプリルフールのRFC 2324由来のジョークコード。
処理不能Unprocessable Content
構文は正しいが意味的に処理できない(バリデーションエラー)。WebDAV由来だがWeb APIで広く使われる。
アップグレード必須Upgrade Required
別プロトコルへの切り替えが必要。Upgradeヘッダで指定。
事前条件必須Precondition Required
条件付きリクエストを要求する。更新の取りこぼし(lost update)を防ぐため。
要求過多Too Many Requests
レート制限を超えた。
Retry-Afterヘッダで待つべき秒数を返す。指数バックオフで再試行を。
法的理由で利用不可Unavailable For Legal Reasons
検閲や法的要請でブロックされた。番号は華氏451度にちなむ。
サーバー内部エラーInternal Server Error
サーバー側で想定外の例外が起きた。汎用のサーバーエラー。
詳細はログで。クライアントに内部情報を出さないこと。
未実装Not Implemented
サーバーがそのメソッドや機能に対応していない。
不正ゲートウェイBad Gateway
プロキシ/ロードバランサが上流サーバーから無効な応答を受けた。
上流アプリのダウンやクラッシュで頻出。
一時的に利用不可Service Unavailable
過負荷やメンテナンスで一時的に処理できない。
Retry-Afterで復帰目安を返せる。恒常化なら容量・スケールを疑う。
ゲートウェイタイムアウトGateway Timeout
プロキシ/LBが上流の応答を時間内に得られなかった。
上流の遅延やタイムアウト設定の不整合を疑う。
非対応HTTPバージョンHTTP Version Not Supported
リクエストのHTTPバージョンにサーバーが対応していない。
ストレージ不足Insufficient Storage
サーバーの保存領域が足りず処理を完了できない(WebDAV)。
ネットワーク認証必須Network Authentication Required
ネットワークへのアクセスに認証が要る。Wi-Fiのキャプティブポータル(ログイン画面)で使う。
つまずきやすい区別
- 401 と 403:401は「誰かわからない(認証して)」、403は「誰かはわかるが許さない(権限なし)」。
- 301 と 302 と 308/307:301/302は実装がメソッドをGETに変えがち。メソッドを保つなら308(恒久)/307(一時)。
- 502 と 503 と 504:502=上流から無効な応答、503=一時的に処理不能(過負荷/メンテ)、504=上流の応答待ちタイムアウト。
- 404 と 410:404=無い(かもしれない)、410=恒久的にもう無い(検索エンジンにも明確)。