情報 1xx
1xx コード
100Continue — サーバーがヘッダーを受信、クライアントはボディを送信すべき
101Switching Protocols — WebSocket または HTTP/2 へのアップグレード
102Processing — サーバーがリクエストを受信し処理中(WebDAV)
103Early Hints — 最終レスポンス前にリソースをプリロード
使用上の注意
# 100 Continue: client sends Expect header, waits for 100 curl -H "Expect: 100-continue" -d @large.json URL # 101: upgrade to WebSocket Connection: Upgrade / Upgrade: websocket
成功 2xx
2xx コード
200OK — 標準的な成功レスポンス
201Created — リソースの作成に成功(POST/PUT)
202Accepted — リクエストを受信し、非同期で処理中
203Non-Authoritative Info — プロキシによって変換された情報
204No Content — レスポンスボディなしで成功(DELETE)
205Reset Content — 成功、クライアントはフォームをリセットすべき
206Partial Content — レンジリクエストが完了
207Multi-Status — 複数のステータスコード(WebDAV)
REST API の使用例
GET → 200ボディ付きでリソースを返す
POST → 201リソース作成済み、Location ヘッダーを含める
PUT → 200/204リソース更新(ボディあり / なし)
DELETE → 204削除済み、ボディなし
PATCH → 200部分更新、変更後のリソースを返す
リダイレクト 3xx
3xx コード
300Multiple Choices — 複数の表現が利用可能
301Moved Permanently — リソースが移動した、ブックマークを更新すべき
302Found — 一時的なリダイレクト(303 の代わりに誤用されることが多い)
303See Other — POST 後に GET でリダイレクト
304Not Modified — キャッシュを使用(ETag/If-Modified)
307Temporary Redirect — 同一メソッドで一時的な場所へ
308Permanent Redirect — 同一メソッドで恒久的な場所へ
リダイレクトの動作
301/308恒久的 — 検索エンジンはインデックスを更新する
302/307一時的 — 元の URL が正規 URL のまま
301/302リダイレクト時にメソッドが GET に変更される場合がある
307/308元の HTTP メソッドを保持しなければならない
クライアントエラー 4xx
よくあるクライアントエラー
400Bad Request — 構文が不正またはパラメーターが無効
401Unauthorized — 認証が必要または失敗した
403Forbidden — 認証済みだがアクセス権がない
404Not Found — リソースが存在しない
405Method Not Allowed — HTTP メソッドがサポートされていない
406Not Acceptable — Accept ヘッダーを満たせない
408Request Timeout — クライアントのリクエスト送信が遅すぎる
409Conflict — リクエストが現在の状態と競合
その他のクライアントエラー
410Gone — リソースが永久に削除された(単なる不在ではない)
411Length Required — Content-Length ヘッダーがない
412Precondition Failed — If-Match/If-Unmodified の条件が不成立
413Content Too Large — リクエストボディが上限を超えた
414URI Too Long — URL がサーバー上限を超えた
415Unsupported Media Type — Content-Type が受け入れられない
422Unprocessable Content — 構文は有効だが意味論的エラー
429Too Many Requests — レート制限を超えた
サーバーエラー 5xx
5xx コード
500Internal Server Error — サーバーで未処理の例外が発生
501Not Implemented — サーバーがそのメソッドをサポートしない
502Bad Gateway — アップストリームサーバーが無効なレスポンスを返した
503Service Unavailable — 過負荷またはメンテナンス中
504Gateway Timeout — アップストリームサーバーが時間内に応答しなかった
505HTTP Version Not Supported — バージョンが処理できない
507Insufficient Storage — サーバーがリクエストを保存できない(WebDAV)
511Network Auth Required — キャプティブポータルへのログインが必要
リトライ戦略
500バックオフしてリトライ;一時的な場合がある
502/504リトライ — アップストリームの問題が解消される可能性がある
503リトライ前に Retry-After ヘッダーを確認
501/505リトライ不可 — クライアントのリクエストを修正する
よく使うコード
最頻出コード(一覧)
200OK — すべて正常
201Created — 新しいリソースを作成
204No Content — 成功、ボディなし
301Moved Permanently — URL を更新
304Not Modified — キャッシュを使用
400Bad Request — リクエストを修正
401Unauthorized — 先にログイン
403Forbidden — 権限が不足
404Not Found — URL が誤りまたは削除済み
422Unprocessable — バリデーションエラー
429Too Many Requests — 速度を落とす
500Server Error — クライアントの問題ではない
502Bad Gateway — プロキシ / アップストリームの障害
503Unavailable — 後でリトライ
ヘッダーリファレンス
リクエストヘッダー
Accept希望するレスポンスのメディアタイプ(例:application/json)
Authorizationクレデンシャル(Bearer トークン、Basic base64)
Content-Typeリクエストボディのメディアタイプ
If-None-Match条件付き:キャッシュ検証用の ETag
If-Modified-Since条件付き:キャッシュ検証用の日時
Cache-Controlキャッシュディレクティブ(no-cache、max-age)
User-Agentクライアントの識別文字列
レスポンスヘッダー
Content-Typeレスポンスボディのメディアタイプ
Locationリダイレクト先または作成されたリソースの URL
ETagキャッシュ検証用のエンティティタグ
Cache-Controlキャッシュディレクティブ(max-age、no-store)
Retry-Afterリトライまでの待機時間(429/503)
WWW-Authenticate必要な認証スキーム(401 と共に送信)
Set-Cookieクライアントにクッキーを設定
よくあるパターン
キャッシュフロー
# First request — server returns ETag GET /api/data → 200, ETag: "abc123" # Subsequent request — conditional GET /api/data, If-None-Match: "abc123" → 304 Not Modified (use cache)
認証フロー
# Unauthenticated request GET /api/secret → 401, WWW-Authenticate: Bearer # With token GET /api/secret, Authorization: Bearer → 200 OK
レート制限
# Rate limited response 429 Too Many Requests Retry-After: 60 X-RateLimit-Remaining: 0 X-RateLimit-Reset: 1700000000
コンテントネゴシエーション
# Client prefers JSON, accepts XML Accept: application/json, application/xml;q=0.9 # Server can't satisfy → 406 Not Acceptable # Server returns best match → 200 + Content-Type