429エラー【HTTP 429 Too Many Requests】
概要
HTTPステータスコードとは
WebサーバとWebクライアントの間では「HTTP」(Hypertext Transfer Protocol)という通信規約(プロトコル)でデータ伝送を行っている。クライアントからの要求(リクエスト)に対してサーバは応答(レスポンス)を返すが、その際に現在の状態を示す「HTTPステータスコード」を通知する。
ステータスコードは3桁の番号と簡易なメッセージで表される。番号の最上位桁は分類、下2桁は識別番号である。100番台は「情報」(Informational)、200番台は「成功」(Success)、300番台は「転送」(Redirection)、400番台は「クライアントエラー」(Client Error)、500番台は「サーバエラー」(Server Error)を表している。
429 Too Many Requestsとは
429エラーは、同一のIPアドレスやアカウントから極めて短い間隔で連続してアクセスした場合や、自動化されたプログラムが大量のリクエストを一度に送信した場合などに送られる。Web閲覧だけでなく、アプリケーションがWeb APIを利用する際にも返される。人間による通常の操作でこの制限に抵触することはあまりない。
多数の利用者が同時にサービスへアクセスし、一時的に制限が適用されることもある。エラー画面ではしばらく待ってから再試行するよう案内されることが多い。Web APIではHTTPレスポンスヘッダの「Retry-After」で次のアクセスまで待つべき秒数や日時が示される場合もあり、この指定に従って間隔を空けてアクセスすれば制限を受けにくくなる。
このようなアクセス制限は、「レート制限」(rate limit)や「スロットリング」(throttling)と呼ばれ、サーバへの負荷集中を避け、特定の利用者による過度なアクセスが他の利用者への提供に影響しないようにするために設けられる。サーバの処理能力や提供するサービスの性質に応じて、単位時間あたりに許容するリクエスト数を運営者が個別に設定している。機能やページの種類によって条件が異なる場合もある。
このような制限は、短時間に大量のリクエストを送りつけてサーバを機能不全に追い込むDoS攻撃/DDoS攻撃を遮断したり、Webページを自動収集するプログラムによる情報の過度な取得を防止する目的でも用いられる。プログラムの不具合により意図せず大量の通信が発生する事態を防ぐ安全弁としても機能しており、429エラーが表示されること自体は必ずしもサーバ側の不具合や問題の発生を意味するものではない。
HTTPステータスコード一覧
| コード | 意味 | 初出 |
|---|---|---|
| 100番台:Informational (情報) | ||
| 100 Continue | 継続 | HTTP/1.1 |
| 101 Switching Protocols | プロトコル切替 | HTTP/1.1 |
| 102 Processing | 処理中 | RFC 2518 |
| 103 Early Hints | 予想ヘッダの先行送信 | RFC 8297 |
| 200番台:Success (成功) | ||
| 200 OK | 成功 | HTTP/1.0 |
| 201 Created | 作成完了 | HTTP/1.0 |
| 202 Accepted | 受理 | HTTP/1.0 |
| 203 Non-Authoritative Information | 非公式な情報 | HTTP/1.1 |
| 204 No Content | 内容が空 | HTTP/1.0 |
| 205 Reset Content | 表示を初期化せよ | HTTP/1.1 |
| 206 Partial Content | 内容の一部を送る | HTTP/1.1 |
| 207 Multi-Status | 複数ステータスが混在 | RFC 4918 |
| 208 Already Reported | 以前に通知済み | RFC 5842 |
| 226 IM Used | 差分符号化されている | RFC 3229 |
| 300番台:Redirection (転送) | ||
| 300 Multiple Choices | 複数の候補がある | HTTP/1.1 |
| 301 Moved Permanently | 恒久的に移転 | HTTP/1.0 |
| 302 Found *1 | 別の場所で見つけた | HTTP/1.0 |
| 303 See Other | 別の場所を探せ | HTTP/1.1 |
| 304 Not Modified | 変更なし | HTTP/1.0 |
| 305 Use Proxy | 中継サーバを通せ | HTTP/1.1 |
| 307 Temporary Redirect | 一時的な転送 | HTTP/1.1 |
| 308 Parmanent Redirect | 恒久的な転送 | RFC 7538 |
| 400番台:Client Error (クライアントエラー) | ||
| 400 Bad Request | 不正なリクエスト | HTTP/1.0 |
| 401 Unauthorized | 未認証 | HTTP/1.0 |
| 402 Payment Required | 有料である | HTTP/1.1 |
| 403 Forbidden | アクセス権がない | HTTP/1.0 |
| 404 Not Found | 存在しない | HTTP/1.0 |
| 405 Method Not Allowed | そのメソッドは不可 | HTTP/1.1 |
| 406 Not Acceptable | 受理不可 | HTTP/1.1 |
| 407 Proxy Authentication Required | プロキシの認証が必要 | HTTP/1.1 |
| 408 Request Timeout | 時間切れ | HTTP/1.1 |
| 409 Conflict | 競合 | HTTP/1.1 |
| 410 Gone | 消滅した | HTTP/1.1 |
| 411 Length Required | 長さを指定せよ | HTTP/1.1 |
| 412 Precondition Failed | 前提条件不整合 | HTTP/1.1 |
| 413 Content Too Large *2 | 受信データが長すぎる | HTTP/1.1 |
| 414 URI Too Long *3 | URIが長すぎる | HTTP/1.1 |
| 415 Unsupported Media Type | データ形式非対応 | HTTP/1.1 |
| 416 Range Not Satisfiable *4 | 要求範囲が誤っている | HTTP/1.1 |
| 417 Expectation Failed | Expectヘッダの処理に失敗した | HTTP/1.1 |
| 418 (非使用) *5 | (かつてジョークRFCで使われた) | RFC 2324 |
| 421 Misdirected Request | 送信先が間違っている | HTTP/2 |
| 422 Unprocessable Content | 受信データは処理できない | RFC 4918 |
| 423 Locked | 要求リソースはロックされている | RFC 4918 |
| 424 Failed Dependency | 依存関係の解決に失敗 | RFC 4918 |
| 425 Too Early | TLSのEarly-Data処理に失敗 | RFC 8470 |
| 426 Upgrade Required | 新しいバージョンのHTTPを使え | HTTP/1.1 |
| 428 Precondition Required | 条件付きリクエストにせよ | RFC 6585 |
| 429 Too Many Requests | 短時間に要求を送りすぎである | RFC 6585 |
| 431 Request Header Fields Too Large | 長過ぎる要求ヘッダ項目がある | RFC 6585 |
| 451 Unavailable For Legal Reasons | 法的な理由で拒否 | RFC 7725 |
| 500番台:Server Error (サーバエラー) | ||
| 500 Internal Server Error | サーバ内部のエラー | HTTP/1.0 |
| 501 Not Implemented | 機能が未実装 | HTTP/1.0 |
| 502 Bad Gateway | 中継サーバのエラー | HTTP/1.0 |
| 503 Service Unavailable | サービス停止中 | HTTP/1.0 |
| 504 Gateway Timeout | 中継サーバの要求が時間切れ | HTTP/1.1 |
| 505 HTTP Version Not Supported | HTTPバージョンが非対応 | HTTP/1.1 |
| 506 Variant Also Negotiates | 版指定で循環参照が発生 | RFC 2295 |
| 507 Insufficient Storage | ストレージ容量が不足 | RFC 4918 |
| 508 Loop Detected | 要求処理中に無限ループが発生 | RFC 5842 |
| 510 Not Extended | HTTP拡張機能には非対応(廃止済み) | RFC 2774 |
| 511 Network Authentication Required | キャプティブポータルで認証を受けよ | RFC 6585 |
*2 413はHTTP/1.1では「Request Entity Too Long」、RFC 7231では「Payload Too Long」だった。
*3 414はHTTP/1.1では「Request-URI Too Long」だった。
*4 416はHTTP/1.1では「Requested Range Not Satisfiable」だった。
*5 418は1998年エイプリルフールのジョークRFC 2324で「I'm a teapot」として定義されていた。
